sol:
将 b 进行二进制拆分,就变成了计算$a*(2^0 + 2^1 + 2^2 +....) $,结合乘法分配律,对每一项进行相加,得到结果。 \(O(logN)\)
LL mul(LL a, LL b, LL p) {
LL res = 0;
for(; b; b >>= 1) {
if( b & 1)
res = (res + a) % p;
a = 2 * a % p;
}
return res;
}
原文:https://www.cnblogs.com/wyy0804/p/13619887.html