快速乘

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;
}

如果掌握快速幂的话掌握快速乘也是十分简单的。

以上是关于快速乘的主要内容,如果未能解决你的问题,请参考以下文章

c#代码片段快速构建代码

毕业设计/Matlab系列基于最小二乘滤波WLS和快速双边滤波显示HDR图像

快速乘快速幂(矩阵快速幂)

快速幂和快速乘

快速幂和快速乘

前端开发工具vscode如何快速生成代码片段