n0567

完全数(Perfect number),又称完美数或完备数,是一些特殊的自然数。它所有的真因子(即除了自身以外的约数)的和(即因子函数),恰好等于它本身。如果一个数恰好等于它的因子之和,则称该数为“完全数”。第一个完全数是6,第二个完全数是28,第三个完全数是496,后面的完全数还有8128、33550336等等。

实际上在int可表示范围内的完数少的可怜

1……6

2……28

3……496

4……8,128

5……33,550,336

6……8,589,869,056

7……137,438,691,328

8……2,305,843,008,139,952,128

9……2,658,455,991,569,831,744,654,692,615,953,842,176

10……191,561,942,608,236,107,294,793,378,084,303,638,130,997,321,548,169,216

11……13,164,036,458,569,648,337,239,753,460,458,722,910,223,472,318,386,943,117,783,728,128

12……14,474,011,154,664,524,427,946,373,126,085,988,481,573,677,491,474,835,889,066,354,349,131,199,152,128

示例代码: 求出 1000以内的所有完数

#include?"stdio.h"

int?main()

{

int?j,k,sum?=?0;

for(k=2;k<=1000;k++)?{

sum=0;

for(j=1;j<k;j++)

if(k%j==0)

sum=sum+j;

if(sum==k)

printf("%d?",k);

}

}

示例代码: 求出 1000以内的所有完数

#include?"stdio.h"

int?isPerfect(int?n){

if(n<6)?return?0;

int?sum?=?0;

for(int?i?=?1;?i?<?n;?++i)?{

if(?n?%?i?==?0)?sum?+=?i;

if(sum?>?n)?return?0;

}

if(sum?==?n)?return?1;

return?0;

}

int?main()

{

int?n,?numbers?=?0,?perfects?=?0;

printf("请输入整数(负数或0退出):?\n");

do?{

scanf("%d",?&n);

if(n?<=?0)?break;

if(isPerfect(n))?++perfects;

++numbers;

}?while?(true);

if(numbers?>?0)?{

printf("你一***输入?%d?个数,其中?%d?个完数,?占?%lf%%\n",

numbers,?perfects,?100.0?*?perfects?/?numbers);

}?else?{

printf("你没有输入任何有效数据\n");

}

}