public class PrimeFactorization {
/**
* 质因数分解
* 思路:若为素数,直接输出,若不是素数,从2遍历至输入的开方,找到能够整除输入的最小数,该数
* 为结果之一,然后再判断上一运算的到的商是不是素数,若为素数,直接输出,结束,若不是,对其递归调用方法
* @param n
*/
public void primeFactorization(int n) {
if (isPrime(n)) {
System.out.println(n);
}else{
// 若能够被一个数整除,则这个数必定小于或等于被除数的开方
for (int i = 2; i <= Math.sqrt(n); i++) {
if (n % i == 0) {
System.out.print(i + " ");
if (isPrime(n/i)) {
System.out.println(n/i);
}else {
// 递归调用
primeFactorization(n/i);
}
return ;
}
}
}
}
/**
* 判断一个数是否是素数
* @param n
* @return
*/
public boolean isPrime(int n) {
boolean flag = true;
for(int j = 2; j <= Math.sqrt(n); j++) {
if (n % j == 0) {
flag = false;
break;
}
}
return flag;
}
public static void main(String[] args) {
PrimeFactorization pf = new PrimeFactorization();
pf.primeFactorization(90);
}
}