n0567
完全数(Perfect number),又称完美数或完备数,是一些特殊的自然数。它所有的真因子(即除了自身以外的约数)的和(即因子函数),恰好等于它本身。如果一个数恰好等于它的因子之和,则称该数为“完全数”。第一个完全数是6,第二个完全数是28,第三个完全数是496,后面的完全数还有8128、33550336等等。
实际上在int可表示范围内的完数少的可怜
1……62……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"); }}