乘法逆元
乘法逆元在取模运算中发挥着极其重要的作用。
我们可以很轻松的证明以下式子:
\[(a+b)\%p = (a\%p+b\%p)\%p\\
(a-b)\%p = (a\%p-b\%p)\%p\\
a*b\%p = a\%p*b\%p
\]
但是对于除法:
\[\frac{a}{b}\%p \neq \frac{a\%p}{b\%p}\%p
\]
举个反例:
\[\frac{5}{3}\%3 \neq \frac{5\%3}{3\%3}\%3
\]
这个时候乘法逆元就发挥作用了,假设我们现在面对一个除法:
\[\frac{a}{b}\equiv x\ (mod\ p)①
\]
有没有办法不计算除法也能得到x呢?如果能存在一个数,我们记为\(b^{-1}\),使得:
\[b*b^{-1}\equiv 1\ (mod\ p)②
\]
我们把①②式相乘,就得到:
\[a*b^{-1}\equiv x\ (mod\ p)
\]
这样我们就可以把所有的除法转化为乘法,然后就可以肆无忌惮的取模了。
那么现在如何求\(b^{-1}\)呢?我们把②式改成恒等式:
\[b*b^{-1} + k*p = 1
\]
这个式子是不是跟扩展欧几里得特别像?
\[a*x+b*y=gcd(a,b)
\]
所以我们完全可以用扩展欧几里得求解,又因为gcd(b,p)=1,这就是说只有b,p互质b才有逆元。
我们还可以用费马小定理求解,\(b^{-1} = b^{p-2}\),如果用这种方法除了要求b,p互质,还要求p是质数。