找1000以内的完数
程序员文章站
2024-02-26 19:06:04
...
完数,是一些特殊的自然数,它所有的真因子(即除了自身以外的因子)的和,恰好等于它本身。(所以这里说明一下,1不是完数,因为1只有自身这一个因子)第一个完全数是6,第二个完全数是28,第三个完全数是496,后面的完全数还有8128、33550336等等。
所以程序循环直接从数字2开始判断
代码及运行结果如下:
#include <stdio.h>
int main()
{
int i,j,m,k,sum;
int a[35];//这里数组大小不能太小,因为840有32个因数,是1000以内因数最多的数
for(i=2;i<1000;i++)
{
k=0;//每次判断一个数是不是完数前,要对这两个变量初始化
sum=0;
for(j=1;j<i;j++)//根据完数的定义,这里的限制条件是小于i,而不是小于等于i
{
if(i%j==0)//如果是因数,保存到数组里
{
a[k++]=j;
}
}
if(k==1)//如果一个数除了本身以外只有因数1,则一定不是完数,直接对下一个数进行完数判断
continue;
for(m=0;m<k;m++)
{
sum+=a[m];
}
if(sum==i)
printf("%d是完数\n",i);
}
return 0;
}
运行结果: