小知识来啦。
逆元是费马小定理的一个衍生物(算是吧),主要用于模运算中的除法运算。费马小定理是说假如有\(p\in P,lca(a,p)=1(P为质数集合)\),那么\(a^{p-1}\equiv 1\pmod p\)。换句话说,\(a\times a^{p-2}\equiv 1\pmod p\)。于是我们就会发现\(a^{p-2}\pmod p\)就是逆元。
普通状态下我们可以用 \(O(log p)\)的快速幂求解,但有些时候题目要求线性求解(比如p到达\(10^6\)级别)时,就要用线性求逆元的方法了。
可以推一下公式:
假设inv为逆元函数(关于模数p),那么会有(逆元的定义):
\[\frac{a}{b}\equiv a\times inv(b)\pmod p \] \[a\times inv(a)\equiv 1\pmod p \]设\(t=\lfloor\frac{p}{i}\rfloor,k=p\%i\),那么,
\[t\times i+k\equiv p\equiv 0\pmod p \] \[-t\times i\equiv k\pmod p \] \[-t\times i\times inv(i)\times inv(k)\equiv k\times inv(i)\times inv(k)\pmod p \] \[-t\times inv(k)\equiv inv(i)\pmod p \]又因为:
\[-t\equiv -p\%i=p-p\%i\pmod p \]结果就是:
\[inv(i)=(p-p\% i)\times inv(p\%i)\%p \]于是就可以线性求解了。