#20 找出1-1000之间的完数

2022-09-16 10:18:53

题目描述:

一个数如果恰好等于它的因子之和,就被成为完数。
例如6的因子为1,2,3,而6=1+2+3,所以6是一个完数。
编程找出1-1000之间的所有完数,并按照从小到大的顺序输出,输出的每个数都必须以回车结尾。

参考代码:

#include<stdio.h>
#include<math.h> 
void Perfect(int n)
{
	int i,j;
	for(i=2;i<n;i++)
	{
		int now=sqrt((double)i);
		int sum=0;
		for(j=1;j<=now;j++)
		{
			if(i%j==0)
			{
				sum+=j;
				if(j==1||i/j==j) continue;
				sum+=i/j;
			}
		}
		if(sum==i) printf("%d\n",i);
	}
}
int main()
{
	Perfect(1000);
	return 0;
}

讲解:

之前做过类似的题目,直接把代码拿过来用了。(记得之前是求10000以内的完数)

        循环从2到1000,提取当前数的因子求和,并判断完数。

        在求因子的过程中,不需要从1找到i-1,只需从1找到根号 i ,原理很简单,若b能a整除,则b也能被b/a整除。值得注意的是,因子不包括该数本身。

求实求真,大气大为。

  • 作者:Fish_in_UESTC
  • 原文链接:https://blog.csdn.net/qq_35835847/article/details/121520660
    更新时间:2022-09-16 10:18:53