import java.io.*; import java.util.*; public class Main { /** * 要求n的质因子,只用遍历2~(n-1)之间的每一个整数i, * 如果i能被n整除,则i是n的因子; * 优化:如果i是n的质因子,则n必存在另一个因子j>sqrt(n), * 例如:16=2*8,16=4*4,2和8分别小于大于4;因此如果在2~sqrt(n) * 之间没有因子,那么在sqrt(n)~n之间肯定不会有因子。 * 所以只用遍历2~sqrt(n)之间的整数就可以了。 * 通过n/=i,剔除已经求出的质因子,不断减小n,缩小循环次数 * * @param args */ public static void main(String[] args) { Scanner scanner = new Scanner(System.in); long num = scanner.nextLong(); //条件是i*i <= num否则会超时 //如果是i <= num会超时 for (long i = 2; i * i <= num; ++i) { while (num % i == 0) { System.out.print(i + " "); num /= i; } } System.out.println(num == 1 ? "" : num + " "); } }