1.快速幂
板子
//快速幂
ll quick_pow(ll a,ll b,ll mod){
ll sum=1;
while(b){
if(b%2)sum=sum*a%mod;
a=a*a%mod;
b/=2;
}
return sum;
}
2.快速乘积
计算a·b%mod,1<= a,b <=1018
直接乘积取模的话会超范围,固可以用类似快速幂的思想
1.任何数都可以用 2 的次方相加表示,如 10=23 + 21。
2.那么 5·10=5·23+5·21=50
//快速乘积
ll mul(ll a,ll b,ll mod){
ll sum=0;
while(b){
if(b%2)sum=(sum+a)%mod;
a=a*2%mod;
b/=2;
}
return sum;
}