题解 | #质数因子#
质数因子
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,那么它本身是一个质数,打印出来。 - 这种方法确保了所有质因数都被找到并打印,同时避免了不必要的计算。