【逆元的定义】
对于任意正整数a,m,若ax≡1 (mod m),则这个关于x的同余方程的最小正整数解x为“a模m的逆元”。
【逆元的应用】
常常会遇到这种题目:题目中运算的数据比较大,为了避免使用高精度,会要求选手输出答案mod p的结果,一般p是大小合适的质数。这样就可以利用同余的原理,使得每次运算结果都小于p,避免了高精度的使用。
显然,上述方法对于+、-、*运算还是比较方便的,但是如果需要用到除法,就会带来不便(假设b|a):
那么,怎么避免除法呢?可以用逆元。设bx≡1 (mod p),则a/b≡ax (mod p)。这个原理有点像倒数。
【逆元的求解】
求a模m的逆元就是解方程ax≡1 (mod m),下面来考虑如何求解:
方法一:若m是质数,a与m互质。根据费马小定理可以得到:
方法二:若a与m互质,根据欧拉定理可以得到:
发现上述方法都有一个共性:要求a,m互质。虽然m一般都是质数,而a是mod m过的,即a,m互质,但我们还是要寻找一个通解:
方法三:对于任意正整数a,m,要解方程ax≡1 (mod m)其实就是扩展欧几里得算法,具体详见【欧几里得算法及其扩展形式】。
方法四:本方法有些特别,它避开了ax≡1 (mod m)的求解,而是转向逆元的应用:求
对于任意正整数a,b,m有
下面证明这个结论:
至此,逆元问题就得到了解决。