快速幂
ll kpow(ll a,ll b){
ll res = 1,base = a;
while(b){
if(b&1) res = res * base % Mod;
base = base * base % Mod;
b >>= 1;
}
return res;
}
快速乘
时间复杂度为O(1)的两个数相乘结果超过long long取模的快速运算
ll kmult(ll a,ll b){
ll ans = (a * b - (ll)((long double)a / Mod * b + 1.0e-8) * Mod);
return ans < 0 ? ans + Mod : ans;
}
还有一种O(logn)的方法,这种方法虽然慢,但是精确,上面的方法在mod较大的情况下可能会失精
ll kmult(ll a,ll b){
ll res = 0,base = a;
while(b){
if(b&1) res = (res + base) % Mod;
base = (base + base) % Mod;
b >>= 1;
}
return res;
}
快速乘参考博客:https://blog.csdn.net/Charles_Zaqdt/article/details/86041251