UVA 10622 - Perfect P-th Powers(唯一分解+gcd)
题目链接 https://cn.vjudge.net/problem/UVA-10622
【题意】
给你一个非0整数 ,要求你把 写成 的形式,其中 和 均为整数,那么问你p最大能是多少
【思路】
将 唯一分解,然后求各个素因数个数的gcd就可以了,如果是负数的话,答案必须为奇数,不断除2即可
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
bool flag;
ll n;
vector<int> vt;
int gcd(int a,int b){
if(b==0) return a;
return gcd(b,a%b);
}
int main(){
//freopen("in.txt","r",stdin);
//freopen("out2.txt","w",stdout);
while(scanf("%lld",&n)==1 && n){
vt.clear();
flag=n<0?true:false;
n=abs(n);
int m=sqrt(n)+0.5;
for(int i=2;i<=m;++i){
if(n%i==0){
int cnt=0;
while(n%i==0){
n/=i;
++cnt;
}
vt.push_back(cnt);
if(n==1) break;
}
}
if(n>1) vt.push_back(1);
int ans=vt[0];
for(int i=1;i<vt.size();++i){
ans=gcd(ans,vt[i]);
}
if(flag){
while(ans%2==0) ans/=2;
}
printf("%d\n",ans);
}
return 0;
}