Skip to content

快速幂

  • 常规快速幂
c++
ll qpow(ll a,ll b,ll MOD){
    ll res=1%MOD;
    for(;b;b>>=1,a=a*a%MOD){
        if(b&1)res=res*a%MOD
    }
    return res;
}
  • 长整型 with 防爆乘法
c++
using ll = long long;
 
ll mul(ll a, ll b, ll m) { 
    a %= m, b %= m; 
    ll r = a * b - m * (long double)(1.L / m * a * b);
    return r - m * (r >= m) + m * (r < 0);
}
 
ll mul(ll a, ll b, ll m) {
    return (__int128)a * b % m;
}
 
ll qpow(ll a, ll b, ll m) {
    ll res = 1 % m; 
    for (; b; b >>= 1, a = mul(a, a, m)) {
        if (b & 1) res = mul(res, a, m);
    }
    return res;
}