c语言问题,一起解答吧

一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如,6的因子为1,2,3.而6=1+2+3,因此6是“完数”。编程序找出n之内的所有完数,并严格按下面格式输出其因子:6 its factors are 1 2 3


#include<stdio.h>
#include<string.h>
int main()
{
    int n,i,j,k,a[100],s=0;
    scanf("%d",&n);
    for(i=6;i<=n;i++)
    {
        for(j=1;j<i;j++)
       {
        if(i%j==0)
               s=s+j;
       }
       if(s==i)
        {
            printf("%d ",i);
            printf("its factors are ");
        for(k=1;k<i;k++)
        {
            if(i%k==0)
                printf("%d ",k);
        }
        printf("\n");
        }
      s=0;
    }
}
#include <stdio.h>
#include <stdlib.h>
void wanshu(int n)
{
    int i,j = 0;
    int sum = 0;
    int*p = (int*)malloc(sizeof(int)*n);
    for(i=1;i<n;i++)
    {
        if(n%i==0)
        {
            p[j] = i;
            sum += i;
            j++;
        }
    }
    if(sum == n)
    {
        printf("%d its factors are ");
        for(i=0;i<j;i++)
        {
            if(i<j-1)
                printf("%d ",p[i]);
            else
                printf("%d\n",p[i]);
        }
    }
    free(p);
    p = 0;
}

int main()
{
    int i,n;
    scanf("%d",&n);
    for(i=1;i<=n;i++)
        wanshu(i);
    return 0;
}