首页 > 其他 > 详细

快速乘

时间:2020-02-04 20:38:57      阅读:95      评论:0      收藏:0      [点我收藏+]

快速乘法取模

当要求两个长整形取模时,如果直接两个长整形相乘就很容易超出长整形的范围。

乘法的本质就是加法!这时候我们就可以用一遍遍加法来模拟求模,比如一百乘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;
}

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

快速乘

原文:https://www.cnblogs.com/johnfllora/p/12260606.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!