当前位置:码农谷 > 算法与程序 > 求完全数的程序源码(完整源码)

求完全数的程序源码(完整源码)

所属学科:Java语言 难度: 关注度:1385

一、完全数

完全数(Perfectnumber)是一些特殊的自然整数。完全数等于其所有因子的和。这里所谓的因子是指所有可以整除这个数的数,而不包括该数本身。本节将简单介绍完全数的基本规则和性质,以及判断完全数的算法。

1.1  什么是完全数

其实谈到完全数,与之相关的两个概念便是亏数和盈数。一般来说,通过其所有真因子的和来判断一个自然数是亏数、盈数及完全数。

•当一个自然数的所有真因子的和小于该自然数,那么该自然数便是亏数:

•当一个自然数的所有真因子的和大于该自然数,那么该自然数便是盈数;

•当一个自然数的所有真因子的和等于该自然数,那么该自然数便是完全数。

例如,4的所有真因子包括1和2,而4>1+2,所以4是一个亏数;6的所有真因子包括1、2、 3,而6=1+2+3,因此6是一个完全数:12的所有真因子包括1、2、3、4、6,而12<1+2+3+4+6,所以12是一个盈数。下面举几个典型的完全数的例子:

图片25.png 

对于完全数的研究,可以追溯到公元前6世纪。当时,毕达哥拉斯已经发现6和28是完全数。到目前为止,总共找到47个完全数。而寻找完全数是比较困难的,完全数的值越来越大,有时候需要借助高速的计算机来寻找。在所有的自然数中总共有多少个完全数,至今仍然是个谜,许多数学家在为之奋斗。另外,奇特的是,目前所有发现的完全数都是偶数,到底是否存在奇数的完全数也是一个谜。

人们不断研究完全数是因为其有许多特殊的性质,其内容如下。

1) 每一个完全数都可以表示成连续自然数的和

每一个完全数都可以表示成连续自然数的和,这些自然数并不一定是完全数的因数。例如:

6=1+2+3

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

496= I +2+3+4+…+29+30+31

2) 每一个完全数都是调和数

如果一个正整数的所有因子的调和平均是整数,那么这个正整数便是调和数。而每一个完全数都是调和数,例如:

对于完全数6来说,1/1+1/2+1/3+1/6=2 

对于完全数 28 来说,1/1+1/2+1/4+1/7+1/14+1/28=2

3) 每一个完全数都可以表示为2的…呰连续正整数次幂之和每一个完仝数都可以表示为2的一些连续正整数次幂之和,例如:

图片26.png 

4) 已知的完全数都是以6或者8结尾

已知的完全数都是以6或者8结尾,例如,6、28、496、8 128、33 550 336等。从这里也可以看出,已知的每-•个完全数都是偶数,但还没有严格证明没有奇数的完全数。

5) 除6之外的完全数都可以表示成连续奇立方之和

除6之外的完全数都可以表示成连续奇立方之和,例如:

图片27.png 

1.2 计算完全数算法

完全数至今仍是数学家研究的重点,可以通过完全数的定义来编写计算机查找完全数的算法。代码示例如下:

在上述代码中,输入参数fanwei为待查找完全数的范围。在该函数中通过双重循环对每一个数进行判断,当查找到一个完全数之后,便输出该完全数的所有真因子。算法的执行过程完全遵照了完全数的定义,读者可以对照着加深理解。

下面通过一个完整的例子来分析查找完全数算法的应用,这里通过程序来列举10 000以内的所有完全数。完整的程序代码示例如下:

在该程序中,主方法首先初始化待查找的范围,即10 000,然后调用Perfectnum()方法来逐个查找完全数并列举出来。

二、程序

public class Demo_1 {
   static void Perfectnum(long fanwei)     //计算完全数算法
   {
       long[] p=new long[300];           //保存分解的因子 
      long i,j,sum,num;
      int k,count;
 
      for(i=1;i<fanwei;i++)       //循环处理每1个数
      {
         count=0;
         num=i;
         sum=num;
         for(j=1;j<num;j++)    //循环处理每1个数
         {
            if(num % j==0)
            {
                p[count++]=j;   //保存因子,计数器count增加1
                sum=sum-j;  //减去一个因子
            }
         }

关注微信,获得更多免费资源
关于我们   |   免责声明   |   联系我们   |   网站地图   |   HR交流群   |   学生交流群   |   教师交流群

码农谷   版权所有 © 2015-2017   湘ICP备16018319号-1