核心思想:logk的复杂度求出ak mod p
将k拆成若干个2的n之和 (二进制)
#include<iostream>
#include<algorithm>
using namespace std;
typedef long long LL;
LL qmi(int a,int k,int p)
{
LL res = 1 % p;
while(k) //k转为二进制 还有正数 就进行
{
if(k & 1) res = res * a % p; //k个位为1 需要乘上
k >>= 1;
a = (LL)a *a %p; //强转成LL 否则会爆
}
return res;
}
int main()
{
int n;
cin>>n;
while(n--)
{
int a,k,p;
cin>>a>>k>>p;
cout<<qmi(a,k,p)<<endl;
}
}