快速幂

模数 \(p\le3\times10^{9}\) 时,a * b 不会溢出 64 位,直接相乘即可。

i64 binpow(i64 a, i64 b, i64 p) {
    i64 res = 1 % p;
    while (b > 0) {
        if (b & 1) res = res * a % p;
        a = a * a % p;
        b >>= 1;
    }
    return res;
}

计算 \(a^b \bmod p\) 的值,时间 \(\Theta(\log b)\) 。要求模数 \(p\le3\times10^{9}\),否则需用基于mulmod的pow 。