快速ni

 利用2进制的思想(把 要^的数 二进制化)

 同时 将 a 化为二进制每一位的单位 a乘着走

仔细看代码

int n,m;
long long  P;
long long qsn(long long  a,long long b) // 函数中的long long 
{
    long long ans=1;               // ans 要等于1 啊 
    while(b)
    {
        if(b&1) ans=(ans*a)%P;   /// 二进制化  &1 的意思是 看它个位是不是 1 (二进制而言) 
        b>>=1;          // 每一次向右移动 就是 除二 将最右边的那位抹去。 
        a=(a*a)%P;
    }
    return ans;
    
}
View Code
原文地址:https://www.cnblogs.com/Lamboofhome/p/11677649.html