假设 表示质因子 的数量,定义 为一个数拆成其全部质因子的权值,定义 为一个数不拆情况下的权值,也就是一个数的因子数量,一个数因子的数量是其每个质因子数量加一的乘积,如何证明?举个例 ,而 12 的因子其实就是在修改等式右边的指数,每个数 的指数的取值范围是 ,指数为几就代表选择了几个这个质因子,最后乘积一定是 12 的一个因子,现在我们来分类讨论不同情况
#include <bits/stdc++.h> using namespace std; #define int long long const int N = 2e5 + 5; int __t = 1, n, a[N]; vector<int> v; void solve() { cin >> n; map<int, int> mp; for (auto i : v) { while (n % i == 0) { mp[i]++; n /= i; } if (n == 1) break; } if (mp.size() == 1) { cout << mp.begin()->second * 2 << '\n'; } else { int ans = 1; for (auto [x, y] : mp) { ans *= y + 1; } cout << ans << '\n'; } return; } int32_t main() { #ifdef ONLINE_JUDGE ios::sync_with_stdio(false); cin.tie(0); #endif for (int i = 2; i < N; i++) if (a[i] == 0) { v.push_back(i); for (int j = i * 2; j < N; j += i) a[j] = 1; } cin >> __t; while (__t--) solve(); return 0; }