题目链接 https://cn.vjudge.net/problem/UVA-10622
【题意】
给你一个非0整数
n
n
,要求你把 写成
n=ap
n
=
a
p
的形式,其中
a
a
和 均为整数,那么问你p最大能是多少
【思路】
将
n
n
<script type="math/tex" id="MathJax-Element-276">n</script> 唯一分解,然后求各个素因数个数的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;
}