一道关于完数的c语言题

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


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

#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;
}
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+" ");
}

至于什么一行5个的,不用管,10000以内的完数一共才4个