java练习题004

这个暑假一直在进行理论学习,很久没更新博客了,都几乎忘了怎么用Markdown

今天学理论烦躁时写了几道java的小题。下面这道题我觉得挺有趣的,放出来大家一起看看:

题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。

import java.util.*;
public class lianxi04 {
      public static void main(String args[]) {
          System.out.println("请输入一个正整数:");
          Scanner s=new Scanner(System.in);
          int n=s.nextInt();
          int k=2;
          System.out.println(n+"=");
          while(k<=n) {
              if(n==k) {
                  System.out.println(k);
                  break;
                  }
              else if(n%k==0) {
                  System.out.print(k+"*");
                  n=n/k;
              }
              else k++;
          }
      }
}

这道题乍一看会感觉比较麻烦,因为既要考虑分解,还要是质数(素数)。

我刚拿到手的想法是,这道题肯定得有一个方法用来判断一个数是不是素数,然后将这个方法拿到main方法中去用。这样做是能做出来的,但是未免有些过于麻烦了。

我又想了一种方法,那就是:

直接从2一个一个的判断,假如2不是它的质因数,那么所有能被2整除的数当然也不是它的因数,就不用考虑是不是质数了;接着3,假如3不是它的质因数,那么所有能被3整除的数当然也不是它的因数,就不用考虑是不是质数了……以此类推,后面的都可以这样考虑。下面是这个方法的算法步骤:

  1. 如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可;
  2. 如果n != k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数你n,重复执行第一步;
  3. 如果n不能被k整除,则用k+1作为k的值,重复执行第一步。

你可能感兴趣的:(java,java)