求满足条件的最大的指数p,使得a^p = x(a是整数)
解法:当x为正数时,求所有质因数的指数,然后取gcd就是答案
当x为负数时,因为任意数的偶数次方都为正数,则需要将gcd化为奇数
#include<bits/stdc++.h> #define ll long long using namespace std; ll x; const int N=1e6+5; bool mark[N]; int prim[N]; int cnt; void initial() { cnt=0; for (int i=2 ; i<N ; ++i) { if (!mark[i]) prim[cnt++]=i; for (int j=0 ; j<cnt && i*prim[j]<N ; ++j) { mark[i*prim[j]]=1; if (!(i%prim[j])) break; } } } int main() { initial(); int t; scanf("%d",&t); int tt=1; while(t--) { scanf("%lld",&x); int flag=0; if(x<0) { flag=1; x*=-1; } int gcd=0; for(int i=0;i<cnt&&x>=prim[i];i++) { if(x%prim[i]==0) { int num=0; while(x%prim[i]==0) { x/=prim[i]; num++; } if(gcd==0) gcd=num; else gcd=__gcd(gcd,num); } } if(x>1) { gcd=__gcd(gcd,1); } if(flag) { while(gcd%2==0) { gcd/=2; } } printf("Case %d: %d\n",tt++,gcd); // cout<<"Case "<<tt++<<": "<<gcd<<endl; } }
07-19
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交