Loading

逆元学习笔记

逆元的定义

如果\(ax\equiv 1\pmod{p}\),那么称\(x\)\(a\)关于模数\(p\)的逆元。

记作\(inv(a)\)\(a^{-1}\)

如果\(a=p\),那么\(a\)就没有逆元。

逆元的作用

当我们计算\((a/b)\%p\)时,等效于\(a\times inv(b)\% p\)

逆元怎么求

方法一

\(exgcd\)求,详情请见这儿

方法二

快速幂,用到费马小定理

费马小定理

\(a,p\)互质是,且\(p\)为质数,那么\(a^{p-1}\equiv 1\pmod{p}\)

推倒

\(ax\equiv 1\pmod{p}\)

\(ax\equiv a^{p-1}\pmod{p}\)

\(x\equiv a^{p-2}\pmod{p}\)

所以我们可以用快速幂求逆元,只不过\(p\)要为质数!!!

方法三

我们很容易理解\(1^{-1}\equiv 1\pmod{p}\)

现在我们要求整数\(i\)的逆元:

\(p=k\times i+r,(k=p/i向下取整)\)

\(k\times i+r\equiv 0\pmod{p}\)

等式两边同时乘\(inv(r)\)

\(k\times i\times r^{-1}\equiv 0\pmod{p}\)

再同时乘\(inv(i)\)

\(k\times r^{-1}+i^{-1}\equiv 0\pmod{p}\)

\(i^{-1}\equiv (-k\times r^{-1})\pmod{p}\)

\(i^{-1}\equiv (-(p/i)\times (p\%i)^{-1})\pmod{p}\)

所以我们可以写出一下的代码

inv[1] = 1;
for(int i = 2; i <= n; i ++)
{
    inv[i] = (p - p / i) * inv[p % i] % p;
}
posted @ 2021-02-23 20:14  zhangwenxuan  阅读(54)  评论(0编辑  收藏  举报