快速乘
Posted johnfllora
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了快速乘相关的知识,希望对你有一定的参考价值。
快速乘法取模
当要求两个长整形取模时,如果直接两个长整形相乘就很容易超出长整形的范围。
乘法的本质就是加法!这时候我们就可以用一遍遍加法来模拟求模,比如一百乘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; }
如果掌握快速幂的话掌握快速乘也是十分简单的。
以上是关于快速乘的主要内容,如果未能解决你的问题,请参考以下文章