题目:一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如6=1+2+3.编程找出1000以内的所有完数。
注:该答案不是最优解,只是按照本人一开始的思路写的。
#include<stdio.h>
main()
{
int a,i,j,s;
printf("1000以内的完数有:\n");
for (a = 6; a < 1000; a++) //第一个for循环进行遍历1000以内的数,因为最小的完数是6,所以我们直接从6开始。
{
s = 0;
for (i = 2; i < a; i++) //第二个for循环我们开始作为第一个因子数
{
for (j = 2; j < i; j++) //第三个for循环我们作为第二个因子数。(这一步我们其实可以省略,可以用遍历的数对第一个因子取余来判断,并获得该数的因子)
{
if (a == i * j) //判断一下两个因子相乘是否会等于我们遍历的数
{
s += i + j; //将该数的因子数进行相加
}
}
}
if (a == (s + 1)) //因为完数等于真约数之和(即不包含本身的因子)
{
printf("%d ",a);
}
}
return 0;
}
运行结果: