PRELOADER

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

当前文章 : 《质因数分解》

12/4/2018 —— 

题目: 输入一个数,并将这个数分解为几个素数的乘积。例如:16=2x2x2x2; 20=2x5x2;3=3x1;

代码:

  package primeFactorization;

  import java.util.Scanner;

  public class test3 {

      //判断一个数是否为素数
      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 a = in.nextInt();
          int i = 2;
          int c = 0;
          System.out.println(isPrimeNumber(a));
          System.out.print(a+"=");
          do
          {
              if (a%i==0)
              {
                  System.out.print(i+"x");
                  c=a/i;
                  if (isPrimeNumber(c))
                  {
                      System.out.print(c);
                      break;
                  }
                  else
                  {   a=c;
                  }
              }
              if(a%i!=0)
                  {
                      i++;
                  }
          }while (true);

          }
  }
  • 1、这题使用了do-while循环,因为循环体必须要做一次。调用了isPrimeNumber函数,用这个函数可以判断一个数是否是素数,返回一个boolean类型的值用于判断。
  • 2、一个非素数,需要进行分解,首先可用其对一个从2开始数进行整出判断(a%2==0);若可以整除,说明此时可以得到一个商,在判断这个商是否为素数;若为素数则说明可以得到结果,即该数已分解为两个素数的乘积;若这个商不是素数,说明还可以进一步分解,此时将商赋值为变量a。
  • 3、第二条中,若2不能对该输入的数整除,则用3除,之后继续下一步,若3还不能,则继续增加,4,5,6,7…,(事实上只需用素数去试)。但是这需要一个小于输入数值的一个素数数组,该方法是首先想到的,但是目前没有成功写出,有语法错误。
  • 4、下面是流程图:
    enter description here