求(m^k)%p,时间复杂度为O(logk)
所用公式为(ab)%p=(a%p)(b%p)%p
int qmi(int m,int k,int p)
{
int res=1%p;
while(k)
{
if(k&1) res=(long long)res*m%p;
m=(log long)m*m%p;
k>>=1;
}
resturn res;
}res%p 是因为在 k=0 时直接输出 res 的值,此时若 p=1 则输出 res=1,而实际结果是 res=0;
k>>=1; 是把 k 的二进制下的数字右移 1 位;