#include <bits/stdc++.h> using namespace std; typedef long long ll; int main() { int num; while (cin >> num) { for (int i = 2; 1ll * i * i <= num; i++) //1LL会在运算时把后面的临时数据扩容成long long类型 //n的值在每次循环结束可能会改变 //类似于辗转相除法 //隐含的判断条件是当前的n没有小于sqrt(n)的因子,即n为质数,假如当前i小于等于sqrt(n),那么一定可以继续往下除 //?可不可能除以一个合数i 判断不太可能,因为是由小到大的顺序,合数i的因数已经除了 // if(n%i==0) while (num % i == 0) { cout << i << ' '; num /= i; } if (num != 1) cout << num; } }