https://vjudge.net/problem/UVA-10622
将n分解质因数,指数的gcd就是答案
如果n是负数,将答案除2至奇数
原理:(a*b)^p=a^p*b^p
#include<cmath> #include<cstdio> #include<algorithm> #define N 65550 using namespace std; int gcd(int a,int b) { return !b ? a : gcd(b,a%b); } int main() { int m,sum,ans; long long n,nn; while(scanf("%lld",&nn)!=EOF) { if(!nn) return 0; n=abs(nn); m=sqrt(n); ans=0; for(int i=2;i<=m;i++) { sum=0; if(n%i==0) while(n%i==0) sum++,n/=i; ans=gcd(ans,sum); } if(!ans) { printf("1\n"); continue; } if(nn<0) while(!(ans&1)) ans>>=1; printf("%d\n",ans); } }
时间: 2024-10-13 10:02:43