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