快速乘的起由
当我们在计算两数乘积的时候往往会出现爆long long 的情况
这搞得我们不好处理
这时我们想起了之前的快速幂
所以我们也用取模的这个办法边算边取模
那问题又来了两数相乘不就一步吗怎么边算边取模
快速乘的操作
将两个数当中的一个变成2进制下的数
举个栗子:12*11;把11变成1011(2)
12* 11=12 * 2^3+ 12 * 2^1 +12*2^0=96+24+12=132
我们在处理a*b%mod时依据分配律在快速乘当中对每一个加数进行取模运算再相加即可
康康代码
while(b)
{
if(b&1) /位运算,当b的二进制某位为1时才进入
ans=(ans+a)%mod; /模仿二进制乘,并在每一次乘完之后就取模
a=(2*a)%n; /将a不断乘2达到二进制
b/=2;
}
printf("%lld\n",ans);