题解:P11416 [EPXLQ2024 fall round] Simple Math Problem
@junjie_zhao 在我写这题的时候一直嘲讽我 /kel
感谢 @Augenstern5 提供的指导。
记
展开,得
显然有
记
又因为显然有如下结论:
假设
所以最终直接对
时间复杂度
#include <bits/stdc++.h>
#define int long long
using namespace std;
unordered_map<int, int> mp;
signed main() { ios::sync_with_stdio(false); cin.tie(0);
int t; cin >> t;
while(t--) {
int n; cin >> n; mp.clear();
for(int i = 2;i * i <= n;i++)
if(n % i == 0) {
while(n % i == 0) n /= i, mp[i]++;
} if(n != 1) mp[n]++; for(auto i : mp) mp[i.first] *= 2;
long long num = 1; for(auto i : mp) num = (num * (mp[i.first] + 1)); cout << num / 2 << "\n";
}
return 0;
}