题解 | #质数因子#
质数因子
https://www.nowcoder.com/practice/196534628ca6490ebce2e336b47b3607
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
long num = Long.parseLong(scan.next());
getPrimeFactors(num);
}
public static void getPrimeFactors(long num) {
// 处理2,因为它是唯一的偶数质数
if (num % 2 == 0) {
System.out.print(2 + " ");
getPrimeFactors(num / 2);
return;
}
// 处理奇数质因数
for (long i = 3; i * i <= num; i += 2) {
while (num % i == 0) {
System.out.print(i + " ");
num /= i;
}
}
// 如果num大于2,那么它本身是一个质数
if (num > 2) {
System.out.print(num);
}
}
}
- 首先处理偶数质因数2,因为它是唯一的偶数质数,而且这样可以让剩余的数保证是奇数。
- 然后通过循环处理所有的奇数质因数,从3开始,每次递增2(跳过偶数),只检查到
sqrt(num)。 - 使用递归来处理除以当前质因数后的结果。
- 当没有更多的质因数可以找到时,如果
num大于2,那么它本身是一个质数,打印出来。 - 这种方法确保了所有质因数都被找到并打印,同时避免了不必要的计算。