完全数问题

来源:百度知道 编辑:UC知道 时间:2024/07/08 23:02:14
如果一个正整数的所有因子之和等于该正整数,则称这个正整数为完全数。输入n,输出不超过n的所有完全数。
请问这个怎么编程?

我来写这段代码吧:
#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)即可.

上面代码没编译,如果有错误请指出,希望能帮助到你.

一个整数的因子是能够整除它的整数。
包括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],