java练习题004

来源:互联网 发布:欧陆风云4 dlc mac 编辑:程序博客网 时间:2024/06/07 02:44

这个暑假一直在进行理论学习,很久没更新博客了,都几乎忘了怎么用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的值,重复执行第一步。
原创粉丝点击