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));
    }
}