标签:数字 位运算 快速乘 就是 掌握 bsp 要求 精益 class
快速乘法取模
当要求两个长整形取模时,如果直接两个长整形相乘就很容易超出长整形的范围。
乘法的本质就是加法!这时候我们就可以用一遍遍加法来模拟求模,比如一百乘1000取模二,就是一千个一百取模2相加。这种直接模拟法还是8太行。为了精益求精 有了快速乘!
如同快速幂取模,快速乘从名字上就可以看出和快速幂的相关性。
同样是将数字化为二进制,然后用位运算使其非常快捷。
而快速乘法就是利用乘法分配律 a*b分解成多个式子相加,其中b化为二进制。
举个例子:
12*12=12*1100(2)=12*2^3+12*2^2=96+48=144
核心代码
ll c(ll i,ll j,ll m) { ll sum=0; //加法从零开始嗷 while(j) { if(j&1)sum=(sum+i)%m; i=(i<<1)%m; j>>=1; } return sum; }
如果掌握快速幂的话掌握快速乘也是十分简单的。
标签:数字 位运算 快速乘 就是 掌握 bsp 要求 精益 class
原文地址:https://www.cnblogs.com/johnfllora/p/12260606.html