二进制乘法

快速二进制乘法:

有时我们要求对\(a,b\)两个数乘积取模,但是两数乘积太大,会爆LL,但是取模结果又不会爆,这时写高精度固然是非常难受的,所以我们可以用二进制乘法来避免它。

原理:

我们将a分解为二进制形式,对于每一个a上的“1”单独相乘,具体方法如下

代码:

int qmult(int a,int b)
{
 int ans=0;
 a%=MOD,b%=MOD;

 while (a)
 {
  if (a&1)
  {
   ans+=b;
   if (ans>=MOD) ans-=MOD;
  }

  a>>=1;
  b=(b<<1)%MOD;
 }

 return ans;
}
posted @ 2016-11-13 10:54  Krew  阅读(455)  评论(0)    收藏  举报