题解 | #质数因子#
质数因子
https://www.nowcoder.com/practice/196534628ca6490ebce2e336b47b3607
import java.util.ArrayList;
import java.util.Scanner;
public class Main {
static ArrayList<Integer> factors = new ArrayList<>();
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int num = in.nextInt();
// 如果不是合数,就没有必要进行因式分解
if (!isPrime(num)) {
factorization(num);
for (Integer factor : factors) {
System.out.print(factor + " ");
}
} else {
System.out.println(num);
}
}
// 判断是不是质数
private static boolean isPrime(int num) {
boolean flag = true;
// 若存在一个因数则不是质数
for (int i = 2; i <= num / 2; i++) {
if (num % i == 0) {
flag = false;
break;
}
}
return flag;
}
// 寻找质因子的方法
// 递归寻找
private static void factorization(int num) {
// 一个数经过多次因数分解,最后的时候相当于是自身也会变成一个质数
if (isPrime(num)) {
factors.add(num);
// 到达递归的终点
return;
}
for (int i = 2; i <= num / 2; i++) {
if (num % i == 0) {
factors.add(i);
factorization(num / i);
break;
}
}
}
}
