java完全数
㈠ 完全数详细资料大全
完全数(Perfect number),又称完美数或完备数,是一些特殊的自然数。它所有的真因子(即除了自身以外的约数)的和(即因子函式),恰好等于它本身。如果一个数恰好等于它的因子之和,则称该数为“完全数”。第一个完全数是6,第二个完全数是28,第三个完全数是496,后面的完全数还有8128、33550336等等。
基本介绍 中文名 :完全数 外文名 :Perfect number 别称 :完美数或完备数 类型 :特殊的自然数 性质1 :所有的完全数都是三角形数 性质2 :可以表示成连续奇立方数之和 定义,特有性质,历史,疑难问题,计算方法,推导公式,计算机枚举法,梅森素数,已发现完全数, 定义 如果一个数恰好等于它的因子之和,则称该数为“完全数”。各个小于它的约数(真约数,列出某数的约数,去掉该数本身,剩下的就是它的真约数)的和等于它本身的自然数叫做完全数(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,有约数1、2、4、8、16、31、62、124、248、496,除去其本身496外,其余9个数相加,1+2+4+8+16+31+62+124+248=496。后面的完全数还有8128、33550336等等。 特有性质 (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^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。 历史 公元前6世纪的毕达哥拉斯是最早研究完全数的人,他已经知道6和28是完全数。毕达哥拉斯曾说:“6象征着完满的婚姻以及健康和美丽,因为它的部分是完整的,并且其和等于自身。”有些《圣经》注释家认为6和28是上帝创造世界时所用的基本数字,因为上帝创造世界花了六天,二十八天则是月亮绕地球一周的日数。圣·奥古斯丁说:6这个数本身就是完全的,并不因为上帝造物用了六天;事实上,因为这个数是一个完全数,所以上帝在六天之内把一切事物都造好了。 毕达哥拉斯 在中国文化里:有六谷、六畜、战国时期的六国、秦始皇以六为国数、六常(仁、义、礼、智、信、孝)、天上四方有二十八宿等等,6和28,在中国历史长河中,之所以熠熠生辉,是因为它是一个完全数。难怪生有的学者说,中国发现完全数比西方还早呢。 完全数诞生后,吸引着众多数学家与业余爱好者像淘金一样去寻找。它很久以来就一直对数学家和业余爱好者有着一种特别的吸引力,他们没完没了地找寻这一类数字。接下去的两个完数看来是公元1世纪,毕达哥拉斯学派成员尼克马修斯发现的,他在其《数论》一书中有一段话如下:也许是这样,正如美的、卓绝的东西是罕有的,是容易计数的,而丑的、坏的东西却滋蔓不已;是以盈数和亏数非常之多,杂乱无章,它们的发现也毫无系统。但是完全数则易于计数,而且又顺理成章:因为在个位数里只有一个6;十位数里也只有一个28;第三个在百位数的深处,是496;第四个却在千位数的尾巴颈部上,是8128。它们具有一致的特性:尾数都是6或8,而且永远是偶数。但在茫茫数海中,第五个完全数要大得多,居然藏在千万位数的深处!它是33550336,它的寻求之路也更加扑朔迷离,直到十五世纪才由一位无名氏给出。这一寻找完全数的努力从来没有停止。电子计算机问世后,人们借助这一有力的工具继续探索。笛卡尔曾公开预言:“能找出完全数是不会多的,好比人类一样,要找一个完美人亦非易事。”时至今日,人们一直没有发现有奇完全数的存在。于是是否存在奇完全数成为数论中的一大难题。只知道即便有,这个数也是非常之大,并且需要满足一系列苛刻的条件。 疑难问题 (1)到底有多少完全数? 答:寻找完全数并不是容易的事。经过不少数学家研究,到2013年2月6日为止,一共找到了48个完全数。 (2)有没有奇完全数? 答:奇怪的是,已发现的48个完全数都是偶数,会不会有奇完全数存在呢?如果存在,它必须大于10^300。至今无人能回答这些问题。尽管没有发现奇完全数,但是当代数学家奥斯丁·欧尔证明,若有奇完全数,则其形式必然是12^p+1或36^p+9的形式,其中p是素数。在10^300以下的自然数中奇完全数是不存在的。 另外,如果存在奇完全数,则它们必能表示p^2*q的形式,除6外的偶完全数亦有此性质。 计算方法 推导公式 大数学家欧拉曾推算出完全数的获得公式:如果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)利用VB编程求10000以内完全数。 DimaasInteger,basInteger,casIntegerFora=1To10000c=0Forb=1Toa2IfaModb=0Thenc=c+bNextbIfa=cThenPrintStr(a)Nexta (2)利用C语言编程求1000以内完全数。 #include"stdio.h"voidmain(){intj,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);}} (3)利用java语言编程求1000以内完全数。 publicclassPerfectNumber{publicstaticvoidmain(String[]args){for(inti=2;i<1000;i++){intsum=0;查找因数for(intj=1;j<i;j++){if(i%j==0){sum+=j;}if(sum==i)System.out.println(i);}}} (4)利用JavaScript语言编程求N以内完全数。 functionperfectNumber(N){varnums=[],sum,i,j;0除以任意数都是0,所以从1开始for(i=0;i<=N;i++){sum=0完全数除以自己一半,求余肯定会大于0,所以用i/2for(j=1;j<=i/2;j++){if(i%j===0){sum+=j;}}if(sum===i){nums.push(i);}}returnnums;} 梅森素数 古希腊数学家欧几里得在名着《几何原本》中证明了素数有无穷多个,并论述完全数时提出:如果2^P-1是素数(其中指数P也是素数),则2^(P-1)(2^P-1)是完全数。瑞士数学家和物理学家欧拉证明所有的偶完全数都有这种形式。因此,人们只要找到2^P-1型素数,就可以发现偶完全数了。数学界将2^P-1型素数称为“梅森素数”(Mersenne prime),因为法国数学家和法兰西科学院奠基人梅森在这方面的研究成果较为卓着。梅森素数貌似简单,但探究难度却极大。它不仅需要高深的理论和纯熟的技巧,而且还需要进行艰巨的计算。到2013年2月6日为止,人类仅发现48个梅森素数。 值得提出的是:在梅森素数的基础研究方面,法国数学家鲁卡斯和美国数学家雷默都做出了重要贡献;以他们命名的“鲁卡斯-雷默方法”是目前已知的检测梅森素数素性的最佳方法。此外,中国数学家和语言学家周海中给出了梅森素数分布的精确表达式,为人们寻找梅森素数提供了方便;这一研究成果被国际上命名为“周氏猜测”。 梅森素数表如图所示。 已发现完全数 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 …… …… 47 ……2^42643800 X (2^42643801-1) 48 ……2^57885160 X (2^57885161-1) 由于后面数字位数较多,例子只列到12个,第13个有314位。 到第39个完全数有25674127位数,据估计它以四号字打出时需要一本字典大小的书。
㈡ 1000以内的完数有哪些
有三个,6、28、496。
第一个完全数是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。
推导公式:
大数学家欧拉曾推算出完全数的获得公式:如果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是完全数。
㈢ 完全数的计算方法
大数学家欧拉曾推算出完全数的获得公式:如果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 a 2
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<i;j++){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(自然数);}
㈣ 一个数如果恰好等于它的因子之和,这个数就称为完数,编写一个JAVA程序1000内的所有完数
源代码如下:
#include <stdio.h>
main()
{
int i,j;
int sum;
for(i=1;i<=1000;i++)
{
sum=0;
for(j=1;j<i;j++)
{
if(i%j==0)
sum+=j;
}
if(sum==i)
{
printf("%d its factors are ",i);
for(j=1;j<i;j++)
if(i%j==0)
printf("%d ",j);
}
printf(" ");
}
(4)java完全数扩展阅读
1、完全数是一些特殊的自然数,它所有的真因子即除了自身以外的约数的和即因子函数,恰好等于它本身。
2、第一个完全数是6,它有约数1、2、3、6,除去它本身6外,其余3个数相加,1+2+3=6。第二个完全数是28。
3、有约数1、2、4、7、14、28,除去它本身28外,其余5个数相加,1+2+4 + 7 + 14=28。后面的数是496、8128。
㈤ 1000以内的完数
求1000以内的完数的C语言代码如下:
完全数(Perfect number),又称完美数或完备数,是一些特殊的自然数。它所有的真因子(即除了自身以外的约数)的和(即因子函数),恰好等于它本身。
如果一个数恰好等于它的真因子之和,则称该数为“完全数”。第一个完全数是6,第二个完全数是28,第三个完全数是496,33550336等等。截至2018年,相关研究者已经找到51个完全数。
完数,即完美数,一个数如果恰好等于除它本身外的因子之和,这个数就称为完数。例如6=1+2+3.(6的因子是1,2,3)。
#include <stdio.h>
int main()
{
int n=1000;
int r,j,i;
for(i=1;i<=n; i++){
r = 0;
for(j=1;j<i;j++){
if(i%j == 0){
r = r + j;
}
}
if(r == i){
printf("the result is:%d ",r);
}
}
return 0;
}
输出结果为: 6,28,496,
即1000以内的完数只有6、28、496三个数字。