求乘法逆元

发布时间 2023-08-11 09:05:38作者: Oneway`

「观前提醒」

「文章仅供学习和参考,如有问题请在评论区提出」


前提公式


同余式


如果整数 \(a, b\)\(m\) 的余数相同,则称 \(a, b\)\(m\) 同余,记为 $a \equiv b \pmod{m} $ 。


乘法逆元


\(a, b\) 互质,且满足同余方程 \(ax \equiv 1 \pmod{b}\) ,则称 \(x\)\(a\)\(b\) 的乘法逆元,记作 \(a^{-1}\)

例如:$8x \equiv 1 \pmod{5} $ ,解得 \(x = 2, 7, 12...\)


费马小定理


\(p\) 为质数,且 \(a, p\) 互质,则 $a^{p - 1} \equiv 1 \pmod{p} $ 。


求解


对于 \(a, p(a < p)\)\(p\) 是质数,求 \(a\)\(p\) 的乘法逆元。

费马小定理,$a^{p - 1} \equiv 1 \pmod{p} $ ,那么有 $a \times a^{p - 2} \equiv 1 \pmod{p} $ ,所以 \(a^{p - 2}\) 就是 \(a\)\(p\) 的乘法逆元。

利用快速幂,时间复杂度为 \(O(logp)\)

typedef long long LL;

// 快速幂
int qmi(int a, int k, int p) {
    int res = 1;
    while (k) {
        if (k & 1) res = res * (LL)a % p;
        a = a * (LL)a % p;
        k >>= 1;
    }
    return res;
}

int A = qmi(a, p - 2, p);	// a 模 p 的乘法逆元

参考资料


521 同余式 乘法逆元 费马小定理_董晓算法