利用性质,一个数 n 最多只会有一个大于 sqrt(n) 的因子。
注意数据范围,发现可以使用 sqrt(n) 的复杂度直接求质因子,所以直接从 2 遍历到 sqrt(n),如果是因子就输出然后除掉。这样的方法只会拆出质因子,最后剩下的一个数如果不是 1,那就是那个大因子
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N = 2e5 + 5;
int __t = 1, n;
void solve() {
cin >> n;
for (int i = 2; i * i <= n; ++i) {
while (n % i == 0) {
n /= i;
cout << i << " ";
}
}
if (n > 1)
cout << n << " ";
return;
}
int32_t main() {
#ifdef ONLINE_JUDGE
ios::sync_with_stdio(false);
cin.tie(0);
#endif
// cin >> __t;
while (__t--)
solve();
return 0;
}

京公网安备 11010502036488号