快速乘
在我已知的c语言知识中,long long int是最大的常量类型,而在乘法运行中,我们有时会遇到爆long long 的情况(即long long int 装不下数字),例如快速幂。
这时我们就要用到快速乘。
原理如下:
12* 11=12* 1011(2)=12* 2^3 + 12* 2 ^ 1+12 * 2 ^0=96+24+12=132
利用乘法分配律,将a*b分配为上述例子的情况,这样就不会轻易爆long long int。
在这里插入代码片
long long f(long long a,long long b,long long mod)
{
long long res=0;
while(b)
{
if(b&1)
res=(res+a)%mod;
a=(a+a)%mod;
b=b/2;
}
return res;
}