思路
可以考虑质因数分解,使得最后每一个奇妙数字以及它们的乘积是 \(n\) 的因数。
奇妙数字的定义:\(x=p^a\)。
所以在质因数分解的过程中,我们统计每个质因数有多少,然后统计可以分解成多少个奇妙数字。
代码
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
using ll = long long;
ll n, ans;
// cnt 为指数
ll solve(ll cnt) {
ll res = 0;
ll tmp = 1;
while (cnt >= tmp) { // 每次 - tmp 是使乘积为 n
cnt -= tmp;
tmp++;
res++;
}
return res;
}
int main() {
scanf("%lld", &n);
for (ll i = 2; i * i <= n; i++) { // 质因数分解
if (n % i == 0) {
ll cnt = 0;
while (n % i == 0) {
cnt++;
n /= i;
}
ans += solve(cnt);
}
}
if (n != 1) // 没有分解彻底,还有一个质数
ans += solve(1); // 指数为 1
printf("%lld", ans);
return 0;
}
标签:tmp,cnt,题解,GESP202412,奇妙,res,B4070,include,ll
From: https://www.cnblogs.com/panda-lyl/p/18608749