快速幂

原理

把指数 \(b\) 拆成二进制,利用 \(a^{x+y}=a^x\cdot a^y\),将 \(a^b \bmod mod\) 的 \(O(b)\) 暴力乘法优化到 \(O(\log b)\)。

\[a^b \bmod mod \]

将 \(b\) 写成二进制:\(b = b_0\cdot2^0+b_1\cdot2^1+\dots+b_k\cdot2^k\)

\[a^b = a^{b_0\cdot2^0}\cdot a^{b_1\cdot2^1}\cdots a^{b_k\cdot2^k} \]

循环每次把底数平方,若当前二进制位为1,则把底数乘入答案。

运用

求快速幂

直接计算 \(a^b \bmod mod\),指数 \(b\) 可以极大。

乘法逆元

配合费马小定理

模数 \(p\) 为质数时,\(a^{-1}\equiv a^{p-2}\pmod p\),调用快速幂计算。


模版

typedef long long ll;
ll qpow(ll a,ll b,ll mod){
    ll res=1;
    while(b){
        if(b&1) res=res*a%mod;
        a=a*a%mod;
        b>>=1;
    }
    return res;
}

例题

P2613

Link

题目:给出 \(a,b\),求 \(\dfrac{a}{b} \bmod 19260817\),模数\(19260817\)为质数。

式子:

\[\frac{a}{b} \equiv a \times qpow(b,mod-2,mod) \pmod{mod} \]

片段

const int mod=19260817;
ll \(a,b\);
cin>>a>>b;
ll ans=a%mod * qpow(b,mod-2,mod)%mod;
posted @ 2026-10-03 12:33  axiom  阅读(6)  评论(0)    收藏  举报
/* 设置动态特效 */