快速乘
计算a * b%mod,直接计算a * b,如果a和b都是long long int类型就会溢出,快速乘就能保证a * b不会溢出
1234 * 213用小学乘法列竖式:
1234 * 213=1234 * 3+1234 *10 * 1+1234 * 100 * 2
转化为二进制
10101×101= 10101 * 1 + 10101 * 2 * 1 + 10101 * 2^2 * 0 + 10101 * 2^3 * 1
因为转化为二进制后,最多乘二,所以能保证不溢出。
代码如下:
long long int ans=0;
while(b)
{
if(b&1)//二进制
{
ans=ans+a;
ans=ans%mod;
}
a=a*2;
a=a%mod;
b=b/2;
}