long long 有范围,乘法容易会碰到爆long long 的情况,例如快速幂
long long int a;
scanf("%lld",&a);
long long int ans=1;
long long int n=2;
while(a)
{
if(a&1)
ans=(ans*n)%M;
a>>=1;
n=(n*n)%M;
为解决诸如此类的情况,我们需要用到快速乘
12* 11=12* 1011(2)=12* 2^3 + 12* 2 ^ 1+12 * 2 ^0=96+24+12=132
这样就变成了加法运算,不用担心会爆 long long
LL mult_mod(LL a,LL b,LL c)
{
LL ans=0;
while(b!=0)
{
if(b&1) ans=(ans+a)%c;
a=(a+a)%c;
b/=2;
}
return ans;
}