题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。
程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成:
(1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。
(2)如果n <> k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数你n,重复执行第一步。
(3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。
public class 第四题分解质因数 { public static void main(String[] args) { System.out.print("请输入一个正整数进行因数分解:"); Scanner in = new Scanner(System.in); int n = in.nextInt(); if(n < 0) n = -n; //获取最小质数k
int k = getMinPrime(n); System.out.print(n+"="); decompositionFactor(n, k); in.close(); } //质因数分解一次
public static int decompositionFactor(int n,int k) { if(n==k) { System.out.print(n); return n; } while(n != k) { if(n>k && n%k==0) { System.out.print(k+"*"); return decompositionFactor(n/k, getMinPrime(n/k)); } k++; } return n; } //判断一个数是否为素数
public static boolean isPrime(int n) { for(int i=1; i<=Math.sqrt(n); i++) { if(n == 2) { return true; } //不是素数
if(n % 2 == 0) { return false; } } return true; } //返回一个最小的质数
public static int getMinPrime(int n){ for(int i=2; i<=Math.sqrt(n); i++) { if(n % i == 0 && isPrime(i)) { return i; } } return n; } }