首页编程java编程java完全数是什么?java中如何判断一个数是否完全数!!

java完全数是什么?java中如何判断一个数是否完全数!!

编程之家2023-10-12105次浏览

今天给各位分享java完全数是什么的知识,其中也会对java中如何判断一个数是否完全数!!进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

java完全数是什么?java中如何判断一个数是否完全数!!

完全数的计算方法

大数学家欧拉曾推算出完全数的获得公式:如果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,是完全数。

java完全数是什么?java中如何判断一个数是否完全数!!

例如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区域内的完全数为

java完全数是什么?java中如何判断一个数是否完全数!!

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 I\2

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(自然数);}

什么叫完数

一个数如果恰好等于除它本身外的因子之和,这个数就称为"完数",也叫“完美数”。例如6=1+2+3.(6的因子是1,2,3) [编辑本段]代码求1000以内的完数的C++语言代码如下:

#include<iostream>

using namespace std;

int main()

{int n=1000;

int r=0,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)

{cout<<i<<endl;}}

return 0;

}

求1000以内的完数的C语言代码如下:

#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\n",r);

}

}

return 0;

}

输出结果为:

6,28,496,

即1000以内的完数只有6、28、496三个数字。

用Java编写代码如下(只需修改N即可):

{public static void main(String args[])

{intsum=0,i,j;

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

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

{if(i%j==0)

sum+=j;

}

if(sum==i)

System.out.println("完数:"+i);

}

}

}

求N以内的完数的帕斯卡语言代码如下:

var s,i,m:qword;

begin

for s:=1 to n do begin

m:=0;

for i:=1 to s-1 do

begin

if s mod i=0 then m:=m+i;

end;

if m=s then write(s)

end;

writeln('over');

end.

得出了第四个完数 8128

---------完数(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),而(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)

496=2(4)+ 2(5)+...+ 2(8)

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

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

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

6=1+2+3

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

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

除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�

====用VB编写代码如下=====

Dim i As Integer

Dim j As Integer

Dim intSum As Integer

For i= 1 To 1000

intSum= 0

For j= 1 To Int(i/ 2)

If i Mod j= 0 Then intSum= intSum+ j

Next j

If intSum= i Then Print i

Next i

====用PHP编写代码如下=====

求1000以内的完数的PHP语言代码如下:

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

{$wannum=0;

for($j=1;$j<$i;$j++)

{if($i%$j==0)

{$wannum+=$j;}

}

if($wannum==$i)

echo$i."<br>";

}

==============================================java代码如下

public class WanShu{

public static void main(String[] args){

int s;

for(int m= 1; m< 10000; m++){

s= 0;

for(int i= 1; i< m; i++)

if(m% i== 0)

s= s+ i;

if(s== m)

System.out.println(s);

}

}

}

java中如何判断一个数是否完全数!!

java中如何判断一个数是否完全数,可以分为求约数(不包括本身)、求约数之和以及比较自身和约数之和是否相等三个步骤。

第一步:求约数

public static List<int> yueShu(int n){

List<int> list= new ArrayList<int>();

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

if(n%i==0){

list.add(i);

}

}

return list;

}

解析:如果该数除以循环中的变量的余数为零,那么该变量就是该数的约数。其中有个注意点,如果循环变量大于该数的一半之后就不会是该数的余数了(该数本身除外),所以循环到该数一半时便结束。

第二步:求约数之和

public static int sum(List<int> list){

int total=0;

Iterator it=list.iterator();

while(it.hasNext()){

total+=it.next();

}

return total;

}

解析:利用while遍历List,将List中的值全部加起来。

第三步:比较本身与约数之和是否相等

public static boolean isPerfect(int n){

return n==sum(yueShu(n));

}

如果该数与该数的约数之和相等,则该方法返回true,否则返回false。最后根据该方法的返回值判断该数是不是完全数。

关于java完全数是什么的内容到此结束,希望对大家有所帮助。

vers是什么1还是0 versi0n是什么意思kotlin和java什么关系?kotlin和java区别是什么