完全数问题

如果一个正整数的所有因子之和等于该正整数,则称这个正整数为完全数。输入n,输出不超过n的所有完全数。
请问这个怎么编程?

一个整数的因子是能够整除它的整数。
包括1但是不包括它本身.
不过我们一般考虑的是正整数,比如8的因子有1,2,4和8。如果除去这个整数本身就是真因子了。
6是一个非常"完善"的数,与它的因数之间有一种奇妙的联系。6的因数共有4个:l、2、3、6,除了6自身这个因数以外,其他的3个都是它的真因数,数学家们发现:把6的所有美因数都加起来,正好等于6这个自然数本身!

数学上,具有这种性质的自然数叫做完全数。例如,28也是一个完全数,它的真因数有 1、2、4、7、14,而 1+2+4+7+14正好等于28。
一般的大家都认为,1不是完全数.

/* 完全数 */

#include "stdio.h"
#include "conio.h"

main()
{
int i,j,n,w,flag=0,a[50],sum;
/*以是输入一个数的*/
printf("请输入一个正整数:\n");
scanf("%d",&n);
/*以下是求不大于该数的完全数的*/
printf("不大于%d的数中,",n);
for(w=1;w<=n;w++)
{
j=1;
sum=0;
for(i=1;i<w;i++)
{
if(w%i==0)
{
a[j]=i;
j++;
}
}
for(i=1;i<j;i++)
{
sum=sum+a[i];
}
if(sum==w)
{
printf("\n%d是完全数.它的因子为:",w);
for(i=1;i<j;i++)
printf("%8d",a[i]);
flag=1;
}

}
if(flag==0)
printf("没有完全数.");
return 0;
getch();
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2021-01-30
我来写这段代码吧:
#include<stdio.h>
int main()
{
int a,n,i,sum;
printf("please input n;")
for(a=1;a<=n;a++)
{ sum=0; /*更新sum的值为0*/
for(i=1;i<a;i++) /*求出a的所有因子和*/
{ if(a%i==0)
sum+=i;
}
if(sum==a)/*判断a是否等于他的因子之和sum*/
printf(" %d ",a);

}

其实只要注意到完全数肯定是偶数就可简化上面的运算,把for(a=1;a<=n;a++)改为for(a=2;a<=n;a=a+2)即可.

上面代码没编译,如果有错误请指出,希望能帮助到你.本回答被网友采纳
第2个回答  2007-11-25
厉害
第3个回答  2007-11-25
这个很简单,我就不说了
相似回答