题目描述:
一个数如果恰好等于它的因子之和,就被成为完数。 例如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整除。值得注意的是,因子不包括该数本身。
求实求真,大气大为。