二分乘法主要是解决乘法的结果远超int范围,但需要的结果有取余的乘法运算
对于a*b%m来说,如果b为奇数,ans+a,把b变为偶数
如果b为偶数,我们令b减半,a翻倍
类似快速幂的思想
ll multi(ll a,ll b,ll m){//a*b%m 解决乘法的结果远超int范围,但需要的结果有取余的乘法运算
ll ans=0;
a%=m;
while(b){
if(b&1)//b为奇数时变偶数
ans=(ans+a)%m,b--;
b>>=1;//b为偶数时被乘数翻倍,乘数折半
a=(a<<1)%m;
}
return ans;
}