

最后结果只出来个六是完数,之后的就没有了,题目要求求1000以内的完数
第31行去除,然后再将判断真因子那里修改下即可。
修改如下:
参考链接:
完全数_百度百科
完全数(Perfect number),又称完美数或完备数,是一些特殊的自然数。它所有的真因子(即除了自身以外的约数)的和(即因子函数),恰好等于它本身。如果一个数恰好等于它的真因子之和,则称该数为“完全数”。第一个完全数是6,第二个完全数是28,第三个完全数是496,后面的完全数还有8128、33550336等等。截至2018年,相关研究者已经找到51个完全数。
https://baike.baidu.com/item/%E5%AE%8C%E5%85%A8%E6%95%B0/370913?fr=ge_ala
#include <stdio.h>
void findyinshu(int m){
int i,a;
a=m;
int sum=0;
// 因为是求真因子,所以这里for循环的循环条件改为i<a
for(i=2;i<a;i++){
// 计算区间内a的真因子之和,用if判断即可
if(a%i==0){
sum+=i;
}
}
sum=sum+1;
// https://baike.baidu.com/item/%E5%AE%8C%E5%85%A8%E6%95%B0/370913?fr=ge_ala
if(sum==m){
printf("%d是完数\n",m);
}
}
int main(void){
int j;
for(j=2;j<=1000;j++){
findyinshu(j);
}
return 0;
}
