题解
2025-09-27 11:28:45
发布于:广东
4阅读
0回复
0点赞
#include <bits/stdc++.h>
using namespace std;
int main() {
long long n;
cin >> n;
long long temp = n; // 用于质因数分解的临时变量
int max_exp = 0; // 存储最大的质因数指数
long long ans = 0;
// 步骤1:质因数分解,计算各质数的指数并记录最大值
for(long long i = 2;i * i <= temp;i++){
if(temp % i == 0){
int exp = 0;
long long sum = 0;// 累计和,用于判断是否超过max_exp
int m = 0;
// 统计当前质数i的指数
while (temp % i == 0) {
exp++;
temp /= i;
}
// 更新最大指数
while(sum + (m + 1) <= exp){
m++;
ans++;
sum += m; // 累加1+2+...+m
}
}
}
// 处理大于sqrt(n)的剩余质因数(若存在)
if(temp > 1){
ans++;// 该质因数的指数为1
}
// 步骤2:计算最大指数能拆分成的最多不同正整数之和的项数m
cout << ans;
return 0;
}
这里空空如也
有帮助,赞一个