之所以会用到快速乘是因为乘法有时候会溢出,快速乘就是把乘法转化为加法防止溢出。为了降低时间复杂度快速乘要将结果变为二进制乘积的和。
LL Quick_mul(LL a,LL b,LL mod) //LL为long long
{
LL ans=0;
a%=mod;
while(b)
{
if(b&1)
ans=(a+ans)%mod;
a=(a<<1)%mod; //即:a=(a+a)%mod;
b>>=1;
}
return ans%c;
}