欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

找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;
}

运行结果:
找1000以内的完数