一、定义及性质:
1.定义:完全数也叫完美数,它是指一个数的所有真因子(不包括它自己)之和等于它本身。例如:6=1*6=2*3,其真因子有:1 ,2 ,3,且1 2 3=6;28=1*28=2*14=4*7,其真因子有:1,2 ,4,7,14,而且1 2 4 7 14=28;496=1*496=2*248=4*124=8*62=16*31,其真因子有:1,2,4,8,16,31,62,124,248而且1 2 4 8 16 31 62 124 248=496;8128=1*8128=2*4064=4*2032=8*1016=16*508=32*254=64*127,其真因子有:1,2,4,8,16,32,64,127,254,508,1016,2032而且1 2 4 8 16 32 64 127 254 508 1016 2032 4064=8128.
在古希腊时代人们就发现了4个完全数:6,28,496,8128,它们之间相差不大,但是直到15世纪人们才发现了第五个完全数33550336,和前面相差竟然如此遥远。到16世纪才发现了第6 7 8号完全数:8589869056,137438691328,230584300813995218,再到19世纪才找到了第9个完全数2658455991569831744654692615953842176.
2.性质:
1)完全数的所有因子(包括它本身)的倒数和都等于2,例如:对6有:1/1 1/2 1/3 1/6=2;对28有:1/1 1/2 1/4 1/7 1/14 1/28=2;对496有:1/1 1/2 1/4 1/8 1/16 1/31 1/62 1/124 1/248 1/496=2;……
2)完全数都可以写成自然数的和的形式,例如:6=1 2 3;28=1 2 3 4 5 6 7;496=1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31;……
二、用C语言寻找完全数程序运行结果如下:
三、用C语言寻找完全数的程序如下:
//找完全数及其真因子
#include <stdio.h>
int main ()
{ long i,j,m,n,b; //定义长整数i,j,m,n,b
printf("请输入整数范围[m,n] (m n之间用空格隔开):");scanf("%d %d",&m,&n);
for(i=m;i<n;i ) //i为被检验数
{ b=i; //先把被检验数i赋给b
for(j=1;j<i;j ) //j为因数
{ if(i%j==0) b-=j; //若j是i的因数则,被检验数-因数
}
if(b==0)
{ printf("\n%d 是完全数,其真因子有:",i);//若被检验数=全部因数的和则是完全数
b=i; //先把被检验数i赋给b
for(j=1;j<i;j ) //j为因数
{ if(i%j==0) printf("%d ",j); //若j是i的因数则输出
}
}
}
}
,