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);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值