输入一个整数n,要求输出[1,n]范围内的所有完数。完数是一个正整数,该数恰好等于其所有不同真因子之和。例如,6、28是完数,因为6=1+2+3,28=1+2+4+7+14;而24不是完数,因为24≠1+2+3+4+6+8+12=36。
输入格式:
测试数据有多组,处理到文件尾。每组测试数据输入一个整数n(1≤n≤10000)。
输出格式:
对于每组测试,首先输出n和一个冒号“:”;然后输出所有不大于n的完数(每个数据之前留一个空格);若[1,n]范围内不存在完数,则输出NULL
。具体输出格式参考输出样例。
输入样例:
100
5000
5
输出样例:
100: 6 28
5000: 6 28 496
5: NULL
解题思路:
1.计算1~10000间的完数,并存放在一个数组里
2.不存在完数的情况,只能有一种,n<6
3.n>6,输出数组
int main()
{
int arr[10],k=0;// 存放完数
int n;
for(int i=2;i<=10000;i++)
{
int sum=0;
for(int j=1;j<=i/2;j++)
{
if(i%j==0)
sum+=j;
}
if(sum==i)
arr[k++]=i;
}
while(scanf("%d",&n)!=EOF)
{
printf("%d:",n);
if(n<6)
{
printf(" NULL");
goto again;
}
for(int i=0;i<k;i++)
{
if(arr[i]<=n)
printf(" %d",arr[i]);
else
break;
}
again:
printf("\n");
}
return 0;
}