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