说明
因为我们知道乘法有的时候会溢出,即使是 long long 也可能在乘法时因为结果过大溢出(当模数也是 long long )。所以我们需要寻找一种能高效完成乘法操作并且不会爆 long long 的算法,也就是快速乘。
方法
可以将其中一个数变成二进制的形式,这样就可以变成加法运算
例如
12*11=12 * 1011(2)=12 * 2 ^ 3+12 * 2 ^ 1+12 *2 ^ 0=96+24+12=132
代码如下
typedef long long LL;
LL ksc(LL a,LL b,LL mod)
{
LL res=0; //注意此处初始化为0不是1
while(b)
{
if(b&1) res=(res+a)%mod;
a=(a+a)%mod; //注意此处是加不是乘
b/=2;
}
return res;
}