【模板】模意义下的乘法逆元

由于老是搞混,故开此文。


定义

exgcd

  • 条件:\(a\perp p\),不需要 \(p\) 是质数。

  • 原理:利用拓欧求解线性同余方程 \(a\times x\equiv c\pmod b\)\(c=1\) 的情况,可以转化为解 \(a\times x+b\times y =1\).

  • 代码:

void Exgcd(ll a, ll b, ll &x, ll &y) {
    if (!b) x = 1, y = 0;
    else Exgcd(b, a % b, y, x), y -= a / b * x;
}
int main() {
    ll x, y;
    Exgcd (a, p, x, y);
    x = (x % p + p) % p;
    printf ("%d\n", x); //x是a在mod p下的逆元
}

快速幂

  • 条件:\(a\perp p\),且 \(p\) 是质数。

  • 原理:费马小定理。

  • 代码:qp(a,p-2)

线性递推

  • 条件:
【MX】慕汐酱ovo 
线性递推求逆元需要什么条件来着

【MX】慕汐酱ovo 
比如什么 p 是质数之类的(?)

【猫娘】 猫娘 && 笨猪
要求 p 是质数把

【猫娘】 猫娘 && 笨猪 
不然你怎么保证任意点值处都有逆元呢

【MX】慕汐酱ovo 
要不要 a,p 互质

【猫娘】 猫娘 && 笨猪 
当然要

【猫娘】 猫娘 && 笨猪
不然哪来的逆元

【MX】慕汐酱ovo
但是 exgcd 不用)

【猫娘】 猫娘 && 笨猪
?

【猫娘】 猫娘 && 笨猪
a, p 不互质没有逆元啊

【猫娘】 猫娘 && 笨猪
exgcd 凭啥不用

【MX】慕汐酱ovo
哦不对

【MX】慕汐酱ovo 
exgcd 不用 p 是质数)

【猫娘】 猫娘 && 笨猪 
是吧

【猫娘】 猫娘 && 笨猪 
线性求逆元要的。


  • 原理:\(i^{-1}\equiv -\left\lfloor\dfrac{p}{i}\right\rfloor\times(p\bmod i)^{-1}\pmod p\)

  • 代码:

inv[1] = 1;
for(int i = 2; i < p; ++ i)
    inv[i] = (p - p / i) * inv[p % i] % p;

阶乘逆元

参考资料

当然是洛谷的题解啦!!!

link.

posted @ 2023-09-20 14:44  MX_muxi  阅读(65)  评论(0)    收藏  举报
Title