题解:B4070 [GESP202412 五级] 奇妙数字

思路

可以考虑质因数分解,使得最后每一个奇妙数字以及它们的乘积是 \(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;
}
posted @ 2024-12-15 21:16  Panda_LYL  阅读(239)  评论(0)    收藏  举报