第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);
}
}
}本回答被提问者采纳