Basic Gcd Problem
想要让gcd(i,x)尽可能多。当嵌套层数最多时即为x的质因数的指数和
在对c求一次快速幂
#include<bits/stdc++.h> using namespace std; const int mod=1e9+7; int pri[1000050]; int tong[1000050]; int cnt=0; void sss(){ for(int i=2;i<=1e6;++i){ if(tong[i]==0) pri[++cnt]=i; for(int j=i+i;j<1e6;j+=i) tong[j]++; } }// 素数筛 long long ksm(long long s,int k){ long long ans=1; while(k){ if(k%2) ans=anss%mod; s=ss%mod; k/=2; } return ans; }//快速幂 int main (){ int T; sss(); scanf("%d",&T); while(T--){ int n,c,tot=0,x; scanf("%d%d",&n,&c);x=n; for(int i=1;i<=cnt&&pri[i]*pri[i]<=x;++i){ while(n%pri[i]==0) n/=pri[i],tot++; }//求质因数指数个数 if(n!=1)++tot; printf("%lld\n",ksm(c,tot)); } }