4662: 【GESP2412五级】奇妙数字
内存限制:64 MB
时间限制:1.000 S
评测方式:文本比较
命题人:
提交:1
解决:1
题目描述
⼩杨认为⼀个数字$x$ 是奇妙数字当且仅当$x=p^a$ ,其中$p$ 为任意质数且$a$ 为正整数。例如,$8=2^3$ ,所以$8$ 是奇妙数字,而$6$ 不是。
对于一个正整数$n$ ,小杨想要构建一个包含$m$ 个奇妙数字的集合 $\{x_1,x_2,...,x_m\}$,使其满足以下条件:
集合中不包含相同的数字。
$x_1*x_2*...*x_m$是$n$ 的因子(即$x_1,x_2,...,x_m$ 这$m$ 个数字的乘积是$n$ 的因子)。
小杨希望集合包含的奇妙数字尽可能多,请你帮他计算出满足条件的集合最多包含多少个奇妙数字。
对于一个正整数$n$ ,小杨想要构建一个包含$m$ 个奇妙数字的集合 $\{x_1,x_2,...,x_m\}$,使其满足以下条件:
集合中不包含相同的数字。
$x_1*x_2*...*x_m$是$n$ 的因子(即$x_1,x_2,...,x_m$ 这$m$ 个数字的乘积是$n$ 的因子)。
小杨希望集合包含的奇妙数字尽可能多,请你帮他计算出满足条件的集合最多包含多少个奇妙数字。
输入
第一行包含一个正整数$n$ ,含义如题面所示。
输出
输出一个正整数,代表满足条件的集合最多包含的奇妙数字个数。
样例输入 复制
128
样例输出 复制
3
提示
#include <bits/stdc++.h>
using namespace std;
#define ll long long
const int N = 1e5 + 10;
ll calc(ll x) {
int ans = 0;
ll tmp = 1;
while (x >= tmp) {
ans++;
x -= tmp;
tmp++;
}
return ans;
}
int main() {
ll n;
cin >> n;
ll ans = 0;
for (ll i = 2; i * i <= n; i++) {
if (n % i == 0) {
int cnt = 0;
while (n % i == 0) {
cnt++;
n /= i;
}
ans += calc(cnt);
}
}
if (n != 1) {
ans += calc(1);
}
cout << ans << "\n";
}