快速乘
快速乘
当 a 和 b 都大于1e9的时候,为了防止溢出,就需要一个算法,叫做快速乘。
实现方法一:
将乘法转换为加法,并且伴随着取模操作的进行,可以保证不会溢出。
而为了加速加法操作,可以利用快速幂的思路,对加法操作进行优化,复杂度为\(O(log_2 b)\)
ll qmul(ll a,ll b,ll mod){
ll ans=0;
while(b){
if(b&1) ans=(ans+a)%mod;
a=(a<<1)%mod,b>>=1;
}
return ans;
}
实现方法二:
\(O(1)\)复杂度
ll qmul(ll a,ll b,ll mod){
ll c=a*(long double)b/mod;
ll ans=a*b-c*mod;
ans=(ans+mod)%mod;
return ans;
}
CAD加油!欢迎跟我一起讨论学习算法,QQ:1401650042