完数(特殊的自然数)

2023-08-03 24阅读

温馨提示:这篇文章已超过424天没有更新,请注意相关的内容是否还可用!

完数

特殊的自然数

完全数(Perfect number),又称完美数或完备数,是一些特殊的自然数。它所有的真因子(即除了自身以外的约数)的和(即因子函数),恰好等于它本身。如果一个数恰好等于它的因子之和,则称该数为“完全数”。完数即完美数,所有的偶完数都可以表达为2的一些连续正整数次幂之和,除6以外的偶完数,还可以表示成连续奇数的立方和。

中文名 完全数
英文名 Perfect number
类型 特殊的自然数
别称 完美数或完备数

起源历史

公元前6世纪的毕达哥拉斯是最早研究完全数的人,他已经知道6和28是完全数。毕达哥拉斯曾说:“6象征着完满的婚姻以及健康和美丽,因为它的部分是完整的,并且其和等于自身。”有些《圣经》注释家认为6和28是上帝创造世界时所用的基本数字,因为上帝创造世界花了六天,二十八天则是月亮绕地球一周的日数。圣·奥古斯丁说:6这个数本身就是完全的,并不因为上帝造物用了六天;事实上,因为这个数是一个完全数,所以上帝在六天之内把一切事物都造好了。

在中国文化里:有六谷、六畜、战国时期的六国、秦始皇以六为国数、六常(仁、义、礼、智、信、孝)、天上四方有二十八宿等等,6和28,在中国历史长河中,之所以熠熠生辉,是因为它是一个完全数。难怪生有的学者说,中国发现完全数比西方还早呢。

完全数诞生后,吸引着众多数学家与业余爱好者像淘金一样去寻找。它很久以来就一直对数学家和业余爱好者有着一种特别的吸引力,他们没完没了地找寻这一类数字。接下去的两个完数看来是公元1世纪,毕达哥拉斯学派成员尼克马修斯发现的,他在其《数论》一书中有一段话如下:也许是这样,正如美的、卓绝的东西是罕有的,是容易计数的,而丑的、坏的东西却滋蔓不已;是以盈数和亏数非常之多,杂乱无章,它们的发现也毫无系统。

但是完全数则易于计数,而且又顺理成章:因为在个位数里只有一个6;十位数里也只有一个28;第三个在百位数的深处,是496;第四个却在千位数的尾巴颈部上,是8128。它们具有一致的特性:尾数都是6或8,而且永远是偶数。但在茫茫数海中,第五个完全数要大得多,居然藏在千万位数的深处。

它是33550336,它的寻求之路也更加扑朔迷离,直到十五世纪才由一位无名氏给出。这一寻找完全数的努力从来没有停止。电子计算机问世后,人们借助这一有力的工具继续探索。笛卡尔曾公开预言:“能找出完全数是不会多的,好比人类一样,要找一个完美人亦非易事。”时至今日,人们一直没有发现有奇完全数的存在。于是是否存在奇完全数成为数论中的一大难题。只知道即便有,这个数也是非常之大,并且需要满足一系列苛刻的条件。

完数

一个数如果恰好等于它的因子之和,这个数就称为“"完数”。例如6=1+2+3(6的因子是1,2,3)。

例如:第一个完全数是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,有约数1、2、4、8、16、31、62、124、248、496,除去其本身496外,其余9个数相加,1+2+4+8+16+31+62+124+248=496。后面的完全数还有8128、33550336等等。

亏数

对于“4”这个数,它的真约数有1、2,其和是3,比4本身小,像这样的自然数叫做亏数。

盈数

对于“12”这个数,它的真约数有1、2、3、4、6,其和是16,比12本身大,像这样的自然数叫做盈数。所以,完全数就是既不盈余,也不亏欠的自然数。

性质

1.所有的完全数都是三角形数

例如:

6=1+2+3

28=1+2+3+...+6+7

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

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

2.所有的完全数的倒数都是调和数

例如:

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

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

1/1+1/2+1/4+1/8+1/16+1/31+1/62+1/124+1/248+1/496=2

3.可以表示成连续奇立方数之和

除6以外的完全数,都可以表示成连续奇立方数之和,并规律式增加。例如:

28=1³+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

4.都可以表达为2的一些连续正整数次幂之和

不但如此,而且它们的数量为连续质数。例如:

6=2^1+2^2

28=2^2+2^3+2^4

496=2^4+2^5+2^6+2^7+2^8

8128=2^6+2^7+2^8+2^9+2^10+2^11+2^12

33550336=2^12+2^13+……+2^24

5.完全数都是以6或8结尾

如果以8结尾,那么就肯定是以28结尾。(科学家仍未发现由其他数字结尾的完全数。)

6.各位数字辗转式相加个位数是1

除6以外的完全数,把它的各位数字相加,直到变成个位数,那么这个个位数一定是1。例如:

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

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

8128:8+1+2+8=19,1+9=10,1+0=1

33550336:3+3+5+5+0+3+6=28,2+8=10,1+0=1

7.它们被3除余1、被9除余1、1/2被27除余1

除6以外的完全数,它们被3除余1、9除余1、还有1/2被27除余1。

28/3,商9,余1

28/9,商3,余1

28/27,商1,余1

496/3,商165,余1

496/9,商55,余1

8128/3,商2709,余1

8128/9,商903,余1

8128/27,商301,余1

推导公式

大数学家欧拉曾推算出完全数的获得公式:如果p是质数,且2^p-1也是质数,那么(2^p-1)X2^(p-1)便是一个完全数。

例如p=2,是一个质数,2^p-1=3也是质数,(2^p-1)X2^(p-1)=3X2=6,是完全数。

例如p=3,是一个质数,2^p-1=7也是质数,(2^p-1)X2^(p-1)=7X4=28,是完全数。

例如p=5,是一个质数,2^p-1=31也是质数,(2^p-1)X2^(p-1)=31X16=496是完全数。

但是2^p-1什么条件下才是质数呢?

事实上,当2^p-1是质数的时候,称其为梅森素数。到2013年2月6日为止,人类只发现了48个梅森素数,较小的有3、7、31、127等。

计算机枚举法

1.PASCAL程序,判断A~B区域内的完全数为

program wanquanshu;

var i,a,b:longint;

function wanquanshu(i:longint):boolean;

var sum,k:longint;

begin

sum:=1;

for k:=2 to i div 2 do

if i mod k=0 then sum:=sum+k;

if i=sum then wanquanshu:=true

else wanquanshu:=false;

end;

begin

repeat

readln(a,b);

until(a>0)and(b>0)and(b>a);

for i:=a to b do

if wanquanshu(i)then writeln(i);

end。

2.利用FreeBasic编程求n以内完全数

DIM AS INTEGER I,J,S

FOR I=1 TO 10000

S=0

FOR J=1 TO I2

IF I MOD J=0 THEN S=S+J

NEXT J

IF S=I THEN PRINT I,

NEXT I

SLEEP

END

3.利用pascal编程求n以内完全数

program bill02;

var m,n,y,i,j,s,ss,z:longint;

a:array[1..10000]of integer;

begin

readln(m,n);

for i:=m to n do

begin

z:=0;

fillchar(a,sizeof(a),0);

s:=2;

ss:=1;

y:=i;

while y<>0 do

begin

if y mod s=0 then

begin

ss:=ss+1;

a[ss]:=s;

y:=y div s;

end

else

s:=s+1;

end;

for j:=1 to ss do

z:=z+a[j];

if z=i then writeln(i);

end;

end。

4.利用VB编程求10000以内完全数

Dim a as Integer,b as Integer,c as Integer

For a=1 To 10000

c=0

For b=1 To a2

If a Mod b=0 Then c=c+b

Next b

If a=c Then Print Str(a)

Next a

5.利用C语言编程求1000以内完全数

#include“stdio.h”

void 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);

}

}

6.利用java语言编程求1000以内完全数

public class PerfectNumber{

public static void main(String[]args){

for(int i=2;i<1000;i++){

int sum=0;

//查找因数

for(int j=1;j<i;j++){

if(i % j==0){

sum+=j;

}

if(sum==i)

System.out.println(i);

}

}

}

7.利用python语言编程求N以内完全数

def perfect(N):

各个真约数的和等于它本身的自然数叫做完全数(Perfect number),又称完美数或完备数。

perfectNumber=[]

for i in range(5,N):

sum1=0

for j in range(1,i//2+1):

if i%j==0:

sum1+=j

if sum1==i:

perfectNumber.append(i)

return perfectNumber

8.利用c++语言编程求1000以内完全数

#include <iostream>

using namespace std;

int main()

{int i,j,m;

for(i=1;i<=1000;i++){

for(j=1,m=0;j<ij++){

while(i%j==0){

m=m+j;

break;

}

}

if(i==m){

cout<<i<<""<<"its factors are";

for(j=1;j<m;j++){

while(m%j==0){

cout<<j<<',';

break;

}

}

cout<<endl;

}

}

}

9.利用JavaScript语言编程求N以内完全数

function perfectNumber(N){

var nums=[],sum,i,j;

//0除以任意数都是0,所以从1开始

for(i=0;i<=N;i++){

sum=0

//完全数除以自己一半,求余肯定会大于0,所以用i/2

for(j=1;j<=i/2;j++){

if(i%j===0){

sum+=j;

}

}

if(sum===i){

nums.push(i);

}

}

return nums;

}

10.c#/*完美数推算*/

int因子和=0;

foreach(var自然数in Enumerable.Range(2,10000))

{

因子和=0;

foreach(var真约数in Enumerable.Range(1,自然数-1))

if(自然数%真约数==0)因子和+=真约数;

if(因子和==自然数)

Console.WriteLine(自然数);

}

相关他们

完美数

Q1、到底有多少完全数?

A1、寻找完全数并不是容易的事。经过不少数学家研究,到2013年2月6日为止,一共找到了48个完全数。

Q2、有没有奇完全数?

A2、奇怪的是,已发现的48个完全数都是偶数,会不会有奇完全数存在呢?如果存在,它必须大于10^300。至今无人能回答这些问题。尽管没有发现奇完全数,但是当代数学家奥斯丁·欧尔证明,若有奇完全数,则其形式必然是12^p+1或36^p+9的形式,其中p是素数。在10^300以下的自然数中奇完全数是不存在的。

另外,如果存在奇完全数,则它们必能表示p^2*q的形式,除6外的偶完全数亦有此性质。

梅森素数

古希腊数学家欧几里得在名著《几何原本》中证明了素数有无穷多个,并论述完全数时提出:如果2^P-1是素数(其中指数P也是素数),则2^(P-1)(2^P-1)是完全数。瑞士数学家和物理学家欧拉证明所有的偶完全数都有这种形式。因此,人们只要找到2^P-1型素数,就可以发现偶完全数了。数学界将2^P-1型素数称为“梅森素数”(Mersenne prime),因为法国数学家和法兰西科学院奠基人梅森在这方面的研究成果较为卓著。梅森素数貌似简单,但探究难度却极大。它不仅需要高深的理论和纯熟的技巧,而且还需要进行艰巨的计算。到2013年2月6日为止,人类仅发现48个梅森素数。

值得提出的是:在梅森素数的基础研究方面,法国数学家鲁卡斯和美国数学家雷默都做出了重要贡献;以他们命名的“鲁卡斯-雷默方法”是目前已知的检测梅森素数素性的最佳方法。此外,中国数学家和语言学家周海中给出了梅森素数分布的精确表达式,为人们寻找梅森素数提供了方便;这一研究成果被国际上命名为“周氏猜测”。

参考资料

1.完数,又称完美数或完备数,是一些特殊的自然数。·考试资料网

目录[+]