题解 | 质数因子
质数因子
https://www.nowcoder.com/practice/196534628ca6490ebce2e336b47b3607
利用性质,一个数 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; }