题解 UVA10622 【完全P次方数 Perfect P-th Powers】
题意
给定
我的做法是:
- 给
取绝对值后,利用唯一分解定理分解质因数。
得
- 因为
要最大,且 均为整数,所以 。
所以
注意事项
如果
详见代码:
//the code is from chenjh
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
typedef pair<LL,int> PLI;
vector<PLI> prime;
//用 pair 二元组来存储质因数、指数,记住要开 long long 来存储。
int main(){
LL n;
while(scanf("%lld",&n) && n){
//多组数据,读入至 0.
prime.clear();
LL nown=n;
n=llabs(n);
//分解质因数。
LL sqn=sqrt(n);
LL x=n;
int maxx=0;//存储最大指数。
for(LL i=2;i<=sqn;i++){//从 2 枚举到根号 n。
int sum=0;
while(x%i==0 && x>1)x/=i,sum++;
if(sum){
maxx=max(maxx,sum);
prime.push_back(make_pair(i,sum));
}
}
if(x>1) prime.push_back(make_pair(x,1)),maxx=max(maxx,1);
for(int i=maxx;i>0;i--){//从最大指数枚举到 1,来确定最大公约数。
bool flag=1;
int size2=prime.size();
for(int j=0;j<size2;j++){
if(prime[j].second%i){//如果不能被 i 整除。
flag=0;
break;
}
}
if(flag && ((nown<0 && i&1) || nown>0)){
//特判负数,当原数小于 0 时必须不能为偶次幂。
printf("%d\n",i);
break;
}
}
}
return 0;
}
你学会了吗? 谢谢观看!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现