题解
2026-08-29 21:30:02
发布于:江苏
6阅读
0回复
0点赞
#include<bits/stdc++.h>:
using namespace std;
int main(){
// 定义长整型n,题目输入数字,范围最大1e12,必须long long
long long n;
// 读取输入n
cin>>n;
// r保存答案:最多可以选出多少个奇妙数字
int r=0;
// 质因数分解,k枚举可能的质因子;kk<=n是分解经典条件,k要用long long防止溢出
for(long long k=2;kk<=n;k++){
// m 记录当前质数k的幂次(指数)
int m=0;
// 如果n能被k整除,说明k是n的质因子,统计指数
while(n%k==0){
// n除去因子k
n/=k;
// 指数+1
m++;
}
// 核心:贪心,依次取1,2,3……,只要剩余指数m够就选
// for循环:i从1开始,每次i++;判断条件 i <= 当前剩余的m
for(int i=1;i<=m;i++){
// 选中一个奇妙数字,答案计数+1
r++;
// 消耗掉i份指数,剩余指数减去i
m-=i;
}
}
// 分解结束,如果n不等于1,代表还剩下一个大于sqrt(原n)的质数,指数为1
if(n!=1){
// 指数为1,可以选1个奇妙数字,答案+1
r++;
}
// 输出最终结果
cout<<r;
return 0;
}
这里空空如也





有帮助,赞一个