import java.util.*; public class Main { public static void main(String[] args) throws IOException { Scanner scan = new Scanner(System.in);while (scan.hasNextLong()) { long num = scan.nextLong(); // 2是最小的质数,所以从2开始,为了提升效率,判断到num的平方根即可(ps :原因见下面) for (int i = 2; i <= (long) Math.sqrt(num); i++) { // 能整除,说明i是num的质数(注意不是质数的不可能出现在此处,如4,9等已经在i=2,3,时被分解了,故能整除num的指定是质数) while (num % i == 0) { System.out.print(i + " "); // 1.num /= I除掉该质数后,继续找是否还有重复的该质数. 2.没有则进行下一个数i+1是否是质数判断 num /= i; } } // 对于分解到最后的数,若不能被最后的i整除,若不是1,则是num最大的质数 if (num != 1) System.out.println(num); } } }
为什么找质数(素数),找到平方根就可以了,见下图:
参考链接:https://blog.csdn.net/hello_word2/article/details/51940092