费马小定理+线性递推求逆元

问题:求a/b对p的余数

简单,我会(a%p)/(b%p)

很遗憾,除法不满足模运算的分配律,不信你自己去试一试。

那么就需要用到逆元了(\(i的逆元记作inv[i]\))。

\(a*x\equiv1 \pmod {p},且a与p互质,那么我们就能定义: x 为 a 的逆元,记为a^{-1}\)

\(那么求\frac{a}{b}\pmod{p}也就是求\ a*inv[b]\pmod{p}\)



Ⅰ.费马小定理求逆元

注意,这种方法只适用于模数p为质数的时候。

\(这个定理是说a^{p-1} \equiv 1 \pmod{p}\)

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

\(即a^{p-2}是a在模数p下的逆元\)



Ⅱ.\(问题:求1至p的所有数对p下的逆元。\)

\(这个时候即使是ecgcd的O(p\ logp)也不让人满意,好在我们有个O(p)的线性递推算法\)

首先我们知道\(1^{-1}=1(mod\ p),放进递推数组inv[1]=1\)

现在假设\(k=p/i, r=p\%i\)

\(\Rrightarrow p=k*i+r\)

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

\(\Rrightarrow 左右乘上i^{-1}、r^{-1}得k*r^{-1}+i^{-1}\equiv0 \pmod{p}\)

\(\Rrightarrow 移项得i^{-1}\equiv -k*r^{-1} \pmod{p}\)

\(也就是inv\ [i]\ =\ -(p/i)\ *inv\ [p\%i]\ \ (mod\ p)\)

然后因为我们想得到正数下的逆元,所以稍微变化一下得到

\(inv\ [i]=(p-p/i)*\ inv\ [\ p\%i\ ]\ \%p\)

就这么轻松的证完了!!!

posted @ 2020-04-08 19:24  倾叶子佮  阅读(315)  评论(0编辑  收藏  举报