快速乘法模板

快速乘 解决int64*int64%int64问题

移位快速乘,思想是把a*b%p中的b,对其进行二进制拆分,把b拆成二进制形式

a*b=ck-1*a*2k-1+ck-2*a*2k-2+ck-3*a*2k-3+....+c0*a*2其中c代码二进制位是否为1,我们只需要把b每次&1看最后一位是否为1,然后

把b/=2就保证每次最后一位一定是最新的,如果一旦最后一位非0,需要把当前权重加上去 ,初始a=a*1每次乘2后,a=a*2k  这样就能算出结果了

LL movemul(LL a,LL b,LL p){
   LL ans=0;
   for (;b;b>>=1){
       if (b&1)ans=(ans+a)%p;
       a=a*2%p;
   }
    return  ans;
}

O1快速乘,利用的是很简单的一个浮点数类型。long double能保证数字的精确程度,然后再把这个数字进行计算

计算的方式很简单,a*b%p=a*b-[a*b/p]*p

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值