PRELOADER

不念过去 不负现在 不畏将来

当前文章 : 《寻找完数》

12/4/2018 —— 

完数: 又称perfect number,若一个数等于出其自身外所有因数(能被其整除的数)的和,则称该数为完数。例如6=1+2+3;28=1+2+4+7+14;从这个定义可知,素数不能是完数。

题目: 输入两个数,例如1,10.找出这两个数中间存在的完数。

代码:

  package findPerfectNumber;

  import java.util.Scanner;

  public class findPerfectNumber {

      //判断一个数是否为素数
      public static boolean isPrimeNumber(int a) {
              boolean flag = true;
              for(int b=2;b<a;b++) {
                  if(a%b==0) {
                      flag = false;
                      break;
                  }
              }
              return flag;
          }

      public static void main(String[] args) {
          Scanner in = new Scanner(System.in);
          int m = in.nextInt();
          int n = in.nextInt();
          int a=0;
          int sum=1;
          for (int i=m;i<n;i++)
          {
              //System.out.print("i="+i+"  ");
              if (!isPrimeNumber(i))
              {
                  for(int j=2;j<=i/2;j++)
                  {
                      //System.out.print("j="+j+"  ");
                      if(i%j==0)
                      {
                          a=i/j;
                          sum=sum+a;
                          //System.out.print("sum="+sum+"  ");
                      }
                  }
                  if((sum)==i)
                  {
                      System.out.println("the result:"+i);
                  }    
              }
              sum=1;
              //System.out.println();
          }
      }
  }

结果输出:

1
100000000
the result:6
the result:28
the result:496
the result:8128
  • 1、这题依然需要调用函数isPrimeNumber,因为若一个数为素数,则显然不可能是完数。所以只需去寻找区间内的非素数即可。
  • 2、但一个数为非素数,则该数肯定存在因数,找出这所有的因数,相加并与该数比较,即可得到结果。
  • 3、寻找因数的方法为,设置一个从i=2开始的循环,当i能被该数整出时,执行sum=sum+i;循环的终止条件为i<=该数/2;