描述
一个数如果恰好等于不等于它本身的所有因子之和,那么这个数就被称为"完数"。例如,6的因子为1,2,3,而6=1+2+3,因此,6是完数。要求给定一个整数n,请编写程序,确定n是否是完数。
-
输入
-
每组数据输入一个n(1<=n<=10^4)
当n为-1时,输入结束。
输出
-
每组数据输出一行,如果 n 不是完数,输出 No 。
否则,以 n 的因子由小到大相加的形式输出。
样例输入
-
1 2 6 -1
样例输出
-
No No 6=1+2+3
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
int main()
{
int t,n,i,ans,k;
int a[11000];
while(scanf("%d",&n))
{
if(n==-1)
break;
if(n==1)
{
printf("No\n");
continue;
}
memset(a,0,sizeof(a));
k=ans=0;
for(i=2;i*i<=n;i++)//因数判断!!!
{
if(n%i==0)
{
if(i*i==n)
{
a[k++]=i;
ans+=i;
}
else
{
a[k++]=i;
a[k++]=n/i;
ans=ans+i+n/i;
}
}
}
sort(a,a+k);
if(ans+1==n)
{
printf("%d=1",n);
for(i=0;i<k;i++)
printf("+%d",a[i]);
printf("\n");
}
else
printf("No\n");
}
return 0;
}