逆元,乍一看应该是一个数和另外一个数构成了某种拮抗的关系,就像一个数和另一个数的倒数乘积总是为1,实际上,它就是在同余方程这个特殊环境下的一个数的“倒数”。
先看一下它的官方定义:
乘法逆元,是指数学领域群G中任意一个元素a,都在G中有唯一的逆元a‘,具有性质a×a'=a'×a=e,其中e为该群的单位元
把官方定义放在一边,用经验之道来定义逆元就是:存在一个整数x,使得成立,其中(a,q)=1, a,q∈Z。
那我们怎么来求这个逆元呢?下面介绍三种办法。
1.扩展欧几里得定理
贴一个自家广告:https://blog.csdn.net/weixin_43874261/article/details/86410519
我们知道,扩展欧几里得定理可以用来解形如 ((a,b,y,x∈Z,|a+b|>0),(a,b)为a和b的最大公约数)这样的一元二次方程,根据上边的方程可知这样的关系:(a,x,k,q∈Z),原式通过适当变换正好可以转化成这个同余方程所变成的那样,解得x的最小整数解即可。(超链接中有说,这里不详细介绍了)
2.费马小定理
这个就相当于公式法了
费马小定理(Fermat's little theorem)是数论中的一个重要定理,在1636年提出,其内容为: 假如p是质数,且gcd(a,p)=1,那么 a(p-1)≡1(mod p),例如:假如a是整数,p是质数,则a,p显然互质(即两者只有一个公约数1),那么我们可以得到费马小定理的一个特例,即当p为质数时候, a^(p-1)≡1(mod p)。
我们把 与 放在一起,相比各位读者立马就可以得到这个解,求出它是很简单的,但是为了降低时间复杂度,笔者极力推荐“快速幂”算法。z
3.线性求逆元公式
- 首先,设,
- 则有,即
- 两边同除,得到
- 将a和b代回,得到
这个办法适用于求大量逆元,上边的两个办法适用于求单个逆元。