逆元学习笔记
逆元的定义
如果\(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;
}
制作不易,点个赞在走吧(QAQ)