2020.2.3每日一题”快速乘“

快速乘的起由

当我们在计算两数乘积的时候往往会出现爆long long 的情况

这搞得我们不好处理

这时我们想起了之前的快速幂

所以我们也用取模的这个办法边算边取模

那问题又来了两数相乘不就一步吗怎么边算边取模

快速乘的操作

将两个数当中的一个变成2进制下的数

举个栗子:12*11;把11变成1011(2)

12* 11=12 * 2^3+ 12 * 2^1 +12*2^0=96+24+12=132

我们在处理a*b%mod时依据分配律在快速乘当中对每一个加数进行取模运算再相加即可

康康代码

        while(b)
        {
            if(b&1) /位运算,当b的二进制某位为1时才进入
                ans=(ans+a)%mod; /模仿二进制乘,并在每一次乘完之后就取模
            a=(2*a)%n;   /将a不断乘2达到二进制
            b/=2;  
        }
        printf("%lld\n",ans);
发布了32 篇原创文章 · 获赞 5 · 访问量 909

猜你喜欢

转载自blog.csdn.net/LebronGod/article/details/104156322