c语言编程题"编程求1-1000之间的所有完数。完数:该数所有的因子(除去本身)相加之和等于其自身。

c语言编程题。编程求1-1000之间的所有完数。完数:该数所有的因子(除去本身)相加之和等于其自身。例如,6的因子1,2,3,6.除去自身,1+2+3=6.所以6是一个完数。

#include<stdio.h>
int main()
{
int i = 0, j = 0, res;
for (i = 1; i <= 1000; i++)
{
res = 0;
for (j = 1; j < i; j++)
{
if (i % j == 0) res += j;
}
if (res == i) printf("%d ", i);
}
printf("\n");
return 0;
}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-05-22
#include <stdio.h>
int main()
{
    int i=1, j, num=0, sum;
    
    printf("小于1000的完数有:\n");
    printf("6\n");
/*6以外的完数除以3 9都余1(还有1/2除27余1等,详见百科,这里就不判断了),
同时完数也是三角数,利用这两个条件 可以大量减少因式分解的循环次数 
,当范围越大的时,节省的时间也越明显*/
while (1)
{
num = num + i;
if (num >=1000) break;//大于1000,跳出循环 
if (num%3 == 1 && num%9 == 1) // 先判断是否符合完数的性质 
{
sum = 0;
for (j=1;j<num;j++) 
{
if (num%j == 0)
sum = sum +j; 
}
if (sum == num)
printf("%d\n",num);
}

i++;
}
return 0;

}

第2个回答  2019-05-22
#include <stdio.h>
int main()
{
int i,j,sum;
printf("1-1000之间的所有完数:\n");
for (i=2;i<=1000;++i)
{
sum = 0;
for (j=1;j<i;++j)
{
if (i%j==0)
sum += j;
}
if (sum == i)
{
printf("%d\n", i);
}
}
}

本回答被提问者采纳
相似回答