码迷,mamicode.com
首页 > 其他好文 > 详细

快速乘

时间:2020-02-04 20:43:27      阅读:96      评论:0      收藏:0      [点我收藏+]

标签:数字   位运算   快速乘   就是   掌握   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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!