快速幂:
613
2023.05.23
发布于 未知归属地

求(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 位;

评论 (1)