<51个完全数的计算方法-知识大全-龙咔百科
> 知识大全 > 列表
51个完全数的计算方法
时间:2024-12-23 19:23:45
答案

欧拉发现了一个计算完全数的公式:如果\( p \)是一个质数,并且\( 2^p - 1 \)也是质数,那么\( \frac{2^p - 1}{2^{p-1}} \)就是一个完全数。例如,当\( p = 2 \)时,\( 2^p - 1 = 3 \)也是质数,因此\( 3 \times 2 = 6 \)是完全数。当\( p = 3 \)时,\( 2^p - 1 = 7 \)也是质数,所以\( 7 \times 4 = 28 \)是完全数。当\( p = 5 \)时,\( 2^p - 1 = 31 \)也是质数,因此\( 31 \times 16 = 496 \)是完全数。但是,\( 2^p - 1 \)在什么条件下才是质数呢?实际上,当\( 2^p - 1 \)是质数时,我们称它为梅森素数。到2013年2月6日为止,人类只发现了48个梅森素数,其中包括3、7、31、127等较小的质数。

以下是几种编程语言的代码示例,用于寻找给定范围内的完全数:

1. **PASCAL程序**:判断\( A \)到\( B \)区域内的完全数。

```pascal

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 \)以内的完全数。

```freebasic

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

```

3. **Pascal编程**:求\( n \)以内的完全数。

```pascal

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以内的完全数。

```vb

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以内的完全数。

```c

#include

void main(){

int j,k,sum = 0;

for(k=2;k<=1000;k++){

sum=0;

for(j=1;j

if(k%j==0)

sum=sum+j;

if(sum==k)

printf("%d ",k);

}

}

```

6. **Java语言**:求1000以内的完全数。

```java

public class PerfectNumber {

public static void main(String[] args){

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

int sum=0;

//查找因数

for(int j=1;j

if(i % j==0){

sum += j;

}

if(sum==i)

System.out.println(i);

}

}

}

}

```

7. **C++语言**:求1000以内的完全数。

```cpp

#include

using namespace std;

int main () {

int i,j,m;

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

for(j=1,m=0;j

while(i%j==0){

m=m+j;

break;

}

}

if(i==m){

cout<

for(j=1;j

while(m%j==0){

cout<

break;

}

}

cout<

}

}

}

```

8. **JavaScript语言**:求\( N \)以内的完全数。

```javascript

function perfectNumber(N){

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

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

for (i = 1; 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;

}

```

9. **C#**

```csharp

/*完美数推算*/

int 因子和 = 0;

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

{

因子和 = 0;

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

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

if (因子和 == 自然数)

Console.WriteLine(自然数);

}

```

请注意,上述代码片段可能需要根据具体的编程环境进行调整以确保正确运行。

推荐
© 2024 龙咔百科