一道关于完数的c语言题

代码海岸 课程设计 1

输出1000之内的全部“完数”,要求每行输出5个,并统计完数的个数。一个数如果恰好等于它的因子之和,就称其为完数

回复

共4条回复 我来回复
  • 毕业设计客栈
    这个人很懒,什么都没有留下~
    评论
    #include <stdio.h>
    #include <math.h>
    int is_perfect_number(int n)
    {
        if (n < 2)
            return 0;
        int s = 1;
        int m = (int)sqrt(n);
        for (int i = 2; i <= m; i++)
        {
            if (n % i == 0)
            {
                s += i;
                int j = n / i;
                if (i != j)
                    s += j;
            }
        }
        return s == n;
    }
    int main()
    {
        int count = 0;
        for (int i = 1; i <= 1000; i++)
        {
            if (is_perfect_number(i))
            {
                printf("%d ", i);
                count++;
                if (count % 5 == 0)
                    printf("\n");
            }
        }
        printf("\ncount: %d\n", count);
        return 0;
    }
    
    0条评论
  • 代码向导
    这个人很懒,什么都没有留下~
    评论
    #include <stdio.h>
    int main()
    {
        int i, j, s, cnt = 0;
        for (i = 2; i <= 1000; i++)
        {
            s = 0; /*保证每次循环时s的初值为0*/
            for (j = 1; j < i; j++)
            {
                if (i % j == 0) /*判断j是否为i的因子*/
                    s += j;
            }
            if (s == i)
            {
                printf("%d ", i);
                cnt++;
                if (cnt % 5 == 0)
                {
                    printf("\n");
                }
            }
        }
        printf("\n1000以内共有%d个完数",cnt);
        return 0;
    }
    
    0条评论
  • 毕设项目助手
    这个人很懒,什么都没有留下~
    评论
    #include "stdio.h"
    int main(int argc,char *argv[]){
        int n,m,k,i,s,t;
        for(s=k=0,n=4;n<1000;n++){
            for(m=1,t=n/2,i=2;i<=t;i++)
                if(n%i==0)
                    m+=i;
            if(m==n){
                printf(++k%5 ? "%d " : "%d\n",n);
                s++;
            }
        }
        if(k%5)
            printf("\n");
        printf("A total of %d.\n",s);
        return 0;
    }
    
    0条评论
  • 代码导航
    这个人很懒,什么都没有留下~
    评论
    using System.Linq;
    //...
    for(int n=2;n<1001;n++)
    {
        List<int> lst=new List<int>();
        for(int m=1;m<n;m++)
        {
            if(n%m==0)lst.Add(m);
        }
        if(n==lst.Sum())Console.Write(n+" ");
    }
    
    0条评论

发表回复

登录后才能评论