题目
解释
- O(n∗logb)
代码段
#include<iostream>
#define ll long long
using namespace std;
ll qmi(ll a,ll k,ll p)
{
ll res=1;
while(k)//对b进行二进制化,从低位到高位
{
//如果b的二进制表示的第0位为1,则乘上当前的a
if(k&1)res=res*a%p;
//b右移一位
k>>=1;
//更新a,a依次为a^{2^0},a^{2^1},a^{2^2},....,a^{2^logb}
a=a*a%p;
}
return res;
}
int main()
{
int n;cin>>n;
while(n--)
{
ll a,k,p;
cin>>a>>k>>p;
cout<<qmi(a,k,p)<<endl;
}
}