一般为根号n的复杂度,因为一个数可以由两个数相乘而来,所以我们知道其中一个,那么另外一个数也可以求。
所以我们只需要筛出根号n的素数即可。然后枚举所有的素数即可,不要忘记了>根号n的一个素数。
#include <bits/stdc++.h> #define int long long //(有超时风险) #define PII pair<int,int> #define endl '\n' #define LL __int128 using namespace std; const int N = 2e5 + 10, M = 1e3 + 10, mod = 998244353, INF = 0x3f3f3f3f; int a[N], b[N], c[N], pre[N]; int prime[N], cnt; bool st[N]; int sum[N]; //线性筛法,博客有讲解。 void get_prime(int n) { for (int i = 2; i <= n; i++) { if (!st[i])prime[cnt++] = i; for (int j = 0; prime[j] <= n / i; j++) { st[prime[j]*i] = true; if (i % prime[j] == 0)break; } } } signed main() { std::ios::sync_with_stdio(false); std::cin.tie(nullptr); get_prime(2e5); int n; cin >> n; int ans = 0; //枚举所有的素数。 for (int i = 0; i < cnt; i++) { int p = prime[i]; while (n % p == 0) { n /= p; ans++; } } //不要忘了>根号n的质因子。 if (n > 1) ans++; cout << ans << endl; return 0; }
KY7 质因数的个数(计算机考研复试上机题)
最新推荐文章于 2024-07-24 14:05:37 发布