逆元是在数论中广为应用的东西
下面一起来了解一下逆元的定义与求法吧
定义
对于一个数(a),存在一个数(x)使得(ax equiv1 mod m)
则称(x和a互为模m的逆元)
这个的意义在于:(举个栗子)
已知(16a)%(9)的结果,计算((16a/4))%(9)(感性理解下)
若直接用(16a)%(9/4)的话结果为(7a)%(9+4)
但是结果应为(4a)%(9)
若(a)%(9=x)
(7a)%(9+4equiv 7x+4)
(4a)%(9equiv 4a)
(7x+4-4x=3x+4),其不一定为(9)的倍数
所以在取模意义下的除法非常可能发生错误,而乘法完全不会
还记得小学时学除法时(adiv x=a imes frac{1}{x})
则我们可以推知
((adiv x)mod m)
=(a imes x^{-1}mod m)
=(amod m imes x^{-1}mod m)
这就是逆元出现的巨大价值
实现
一
有一个叫做费马小定理的东西
它是指:当(a,pin Z^+且gcd(a,p)=1)时
(a^{p-1}equiv 1 mod p)
所以(a imes a^{p-2}equiv 1mod p)
故(a^{p-2})为a模p的逆元
然后对于它直接用快速幂就可以了
代码就不放了
二
还记得拓展欧几里得定理吗?(不记得||没学过的戳这里)
它可以求解(ax+by=gcd(a,b))的解
若(a=a,b=p)
问题变为了(ax+bp=gcd(a,p)=1)
则((ax+bp)equiv p=axequiv p=1)
则此时(x)的特解满足(xin[0,p))即为(a)模(p)的逆元了
(这还是比较简单的(if)你会拓欧)
三
当然需要(1)到(n)模同一个数的逆元时
可以使用一种线性的方法求解
设(p=a imes i+b,)则(ai+bequiv 0mod p)
两边同乘(i^{-1} imes b^{-1}:)
(ab^{-1}+i^{-1}equiv 0mod p)
故(i^{-1}equiv -a imes b^{-1}mod p)
而(a=[p/i],b=p)%(i)
则(i^{-1}equiv -[p/i] imes (p)%(i)^{-1}mod p)
我们已经在前面的运算中算完了(1→i-1)的逆元
所以(1-n)的逆元就可以线性求完了
结语
逆元广泛地运用在取模运算中
非常非常多的数论题都会牵扯到逆元
所以,加油掌握它,未来的就好解决了