- 对于a^b,可以将b转化为二进制表示(10:1010),故a^b可拆分成a^b1*a^b2*……
- 因此记录一个base=a,如果b的对应位为1,ans*=base
- 最后再给base倍增:base*=a,b位移:b>>=1
#include<bits/stdc++.h>
using namespace std;
long long qpow(long long a,long long b,long long p){
a%=p;
long long ans=1;
while(b){
if(b&1)ans*=a%p;
a*=a%p;
b>>=1;
}
return ans%p;
}
int main(){
int t;
scanf("%d",&t);
while(t--){
long long a,b,p;
scanf("%lld%lld%lld",&a,&b,&p);
printf("%lld\n",qpow(a,b,p));
}
return 0;
}