【模板】模意义下的乘法逆元
由于老是搞混,故开此文。
定义
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;
阶乘逆元
参考资料
当然是洛谷的题解啦!!!