计算机很笨,乘法很慢,还动不动就溢出,于是慢速乘出现了。
她和快速幂是一个套路的。
我们先看一下快速幂
ll mi(ll a,ll b)
{
ll ans=1;
while(b)
{
if(b&1)ans*=a;
a*=a;
b>>=1;
}
return ans;
}
原理是这样的假设我们要求210,那么她等于(22∗2)4为什么写成这样呢,是因为我们可以快速的计算出任意一个整数的2x次幂就是把这个数左移或右移几位然后我们进行这种变换后,就满足了每次进行幂运算时,指数都是2的整数次幂
对于乘法来说,我们也可以按照这种思想比如3∗7可以化成20∗7+21∗7通过这样的思想,我们就可以写出这种新的乘法,因为每次只包含加法和乘二运算所以可以安全的取模
ll mul(ll a,ll b)
{
ll ans = 0;
while(b)
{
if(b&1)ans+=a;
a<<=1;
b>>=1;
}
return ans;
}