如何求区间内完数的和

题目描述
一个数如果恰好等于它的所有真因子之和,这个数就称为“完数”。例如,6的真因子为1 2 3,而6=1+2+3因此,6是“完数”。对于给定的一个区域m到n(m <=n),如果有完数,则输出m到n之间的的所有完数之和;如果没有完数,则输出NO(大写)。
输入描述
m和n,用空格隔开
输出描述
如果有完数,则输出m到n之间的的所有完数之和;如果没有完数,则输出NO(大写)。
输入样例
1 6
输出样例
6

供参考:

#include<stdio.h>
int main()
{
    int m,n,i,j,s=0,sum=0;
    scanf("%d%d",&m,&n);
    if (m > n) s=m,m=n,n=s;
    for(i=m;i<=n;i++)
    {
        for(j=1,s=0;j<i;j++)
        {
            if(i%j==0)
               s+=j;
        }
        if(i==s)
            sum+=i;
    }
    if (sum != 0)
        printf("%d",sum);
    else
        printf("NO");
    return 0;
}

你好,如有帮助,请采纳


#include

int factorsum(int n)

{
int i,sum=0;

for(i=1;i

{
if(n%i==0)

sum+=i;

}

return sum;

}

int main()

{
int n,m,i,flag;

while(scanf("%d%d",&m,&n)!=EOF)

{
flag =1;

for(i=m;i<=n;i++)

{
if(i==factorsum(i))

{
if(flag)

{
printf("%d",i);

flag=0;

}

else

{
printf(" %d",i);

}

}

}

printf("\n");

}

return 0;

}