由于计算机底层设计的原因,做加法往往比乘法快的多,因此将乘法转换为加法计算将会大大提高(大数,比较小的数也没必要)乘法运算的速度,除此之外,当我们计算a*b%mod的时候,往往较大的数计算a*b会超出long long int的范围,这个时候使用快速乘法方法也能解决上述问题.
快速乘法的原理就是利用乘法分配率来将a*b转化为多个式子相加的形式求解(注意这时使用乘法分配率的时候后面的一个乘数转化为二进制的形式计算).举个栗子
20*14 = 20*(1110)2 = 20*(2^3)*1 + 20*(2^2)*1+20*(2^1)*1+20*(2^0)*0 = 160+80+40=280.
上面即为快速乘法的基本原理
ll quick_mul(ll a, ll b, ll c)
{
ll ans = 0;
a %= c;
b %= c;
while (b) {
if (b & 1)//如果对应位为1
ans = (ans + a) % c;
a <<= 1; a %= c;//对应b的位每次的幂次会增加,加在a上
b >>= 1;
}
return ans;
}

本文介绍了如何通过将乘法转化为加法的方式提高大数乘法的运算速度,并给出了一种利用二进制位操作实现快速乘法的具体算法。此外,还提供了一个具体的代码示例,展示了如何使用该算法进行模运算。
&spm=1001.2101.3001.5002&articleId=79296985&d=1&t=3&u=f305d638555348848f67971b4b6d84a9)
300

被折叠的 条评论
为什么被折叠?



