一个找“完数”个数的C语言程序

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

一个找“完数”个数的C语言程序

题目:一个数如果恰好等于它的所有因子之和,这个数就称为"完数"。例如1+2+4+7+14=28.编程找出1000以内的所有完数。

#include "Stdio.h"

#include "Conio.h"

int main(void)

{

/* 此处添加你自己的代码*/

int i,n,sum ;

printf("\nFind a num like 28 == 1 + 2 + 4 + 7 + 14 in 0~1000 ");

printf("\nThe all num is :");

for( n = 1; n < 1000; n++)

{

sum = 0;

for(i = 1;i < n; i++)

if(n%i == 0)

sum += i;

if(sum == n)

printf("%4d",n);

}

getch();

return 0;

}

--------- 完数(Prefect number的形式------------------------------

欧几里德证明了:一个偶数是完数,当且仅当它具有如下形式:2^(p-1)*(2^p-1)

其中2^p-1是素数

完全数(Perfect number)是一些特殊的自然数:它所有的真因子(即除了本身以外的约数

)的和,恰好等于它本身。

例如:第一个完全数是6,它有约数1、2、3、6,除去它本身6外,其余3个数相加,1+2+3

=6。第二个完全数是28,它有约数1、2、4、7、14、28,除去它本身28外,其余5个数相加,1+2+4 + 7 + 14=28。后面的数是496,8128。

古希腊数学家欧几里德是通过2^(n-1)*(2^n-1) 的表达式发现头四个完全数的。

当n = 2^1*(2^2-1) = 6

当n = 2^2*(2^3-1) = 28

当n = 2^4*(2^5-1) = 496

当n = 2^6*(2^7-1) = 8128

欧几里德证明了:一个偶数是完数,当且仅当它具有如下形式:2^(n-1)*(2^n -1)。

尽管没有发现奇完数,但是当代数学家奥斯丁·欧尔(Oystein Ore)证明,若有奇完全

数,则其形状必然是12p + 1或36p + 9的形式,其中p是素数。在1018以下的自然数中奇完

数是不存在的。

3

例子

6,28、496,8128,33550336,8589869056(10位),137438691328(12位),

2305843008139952128(19位)……

偶完数都是以6或8结尾。如果以8结尾,那么就肯定是以28结尾。

除6以外的偶完数,把它的各位数字相加,直到变成一位数,那么这个一位数一定是1(亦即

:除6以外的完数,被9除都余1。):

28:2+8=10,1+0=1

496:4+9+6=19,1+9=10,1+0=1

所有的偶完数都可以表达为2的一些连续正整数次幂之和,从2p - 1到22p - 2: <注:以下a的n次方表示形式为a(n)>

6=2(1 ) + 2(2 )

28=2(2 ) + 2(3) + 2(4)

8128=2(6) + 2(7) + ... + 2(12)

33550336=2(12) + 2(13 ) + ... + 2(24)

每一个偶完数都可以写成连续自然数之和:

6=1+2+3

28=1+2+3+4+5+6+7;

496=1+2+3+…+30+31

8128 = 1+2+3+...+126+127

除6以外的偶完数,还可以表示成连续奇数的立方和(被加的项共有):

28=1(3) + 3(3)

496=1(3) + 3(3) + 5(3) + 7(3)

8128=1(3 ) + 3(3) + 5(3) + ... + 15(3)

33550336=1(3) + 3(3) + 5(3) + ... + 125(3) + 127(3)

每一个完数的所有约数(包括本身)的倒数之和,都等于2:

1/1 + 1/2 + 1/3 + 1/6 =2

1/1 + 1/2 + 1/4 + 1/7 + 1/14 + 1/28 =2

它们的二进制表达式也很有趣:

(6)10 = (110)2

(28)10 = (11100)2

(8128)10 = (1111111000000)2

相关文档
最新文档