你了解逆元吗?

逆元是在数论中广为应用的东西
下面一起来了解一下逆元的定义与求法吧

定义

对于一个数\(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+4\equiv 7x+4\)
\(4a\)%\(9\equiv 4a\)
\(7x+4-4x=3x+4\),其不一定为\(9\)的倍数

所以在取模意义下的除法非常可能发生错误,而乘法完全不会
还记得小学时学除法时\(a\div x=a\times \frac{1}{x}\)
则我们可以推知
\((a\div x)\mod m\)
=\(a\times x^{-1}\mod m\)
=\(a\mod m\times x^{-1}\mod m\)
这就是逆元出现的巨大价值

实现

有一个叫做费马小定理的东西
它是指:当\(a,p\in Z^+且gcd(a,p)=1\)
\(a^{p-1}\equiv 1 \mod p\)
所以\(a\times a^{p-2}\equiv 1\mod 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=ax\equiv p=1\)
则此时\(x\)的特解满足\(x\in[0,p)\)即为\(a\)\(p\)的逆元了
(这还是比较简单的\(if\)你会拓欧)

当然需要\(1\)\(n\)模同一个数的逆元时
可以使用一种线性的方法求解
\(p=a\times i+b,\)\(ai+b\equiv 0\mod p\)
两边同乘\(i^{-1}\times b^{-1}:\)
\(ab^{-1}+i^{-1}\equiv 0\mod p\)
\(i^{-1}\equiv -a\times b^{-1}\mod p\)
\(a=[p/i],b=p\)%\(i\)
\(i^{-1}\equiv -[p/i]\times (p\)%\(i)^{-1}mod p\)
我们已经在前面的运算中算完了\(1→i-1\)的逆元
所以\(1-n\)的逆元就可以线性求完了

结语

逆元广泛地运用在取模运算中
非常非常多的数论题都会牵扯到逆元
所以,加油掌握它,未来的就好解决了

posted @ 2020-08-06 12:31  Realityang  阅读(419)  评论(0编辑  收藏  举报