用于较快计算幂
ull quick_power(ull a,ull b,ull k){
ull ans = 1,base = a % k;
if(b==0 && k==1) return 0;//特判,除0以外任何数的0次方都是1,1模1得0
do{
if(b & 1){
ans = (ans * base) % k;
}
base = (base * base) % k;
b>>=1;
}while(b);
return ans;
}
用于乘法防爆
LL qmul(LL x, LL y, LL MOD){
LL ans = 0;
for( ; y; y >>= 1){
if(y&1 == 1){
(ans += x) %= MOD;
}
(x += x) %= MOD;
}
return ans;
}
两者可以结合使用
原文:https://www.cnblogs.com/Foggy-Forest/p/13373747.html