解乘法逆元的三种办法

 逆元,乍一看应该是一个数和另外一个数构成了某种拮抗的关系,就像一个数和另一个数的倒数乘积总是为1,实际上,它就是在同余方程这个特殊环境下的一个数的“倒数”。

 先看一下它的官方定义:

乘法逆元,是指数学领域群G中任意一个元素a,都在G中有唯一的逆元a‘,具有性质a×a'=a'×a=e,其中e为该群的单位元

把官方定义放在一边,用经验之道来定义逆元就是:存在一个整数x,使得\large ax\equiv 1(mod q)成立,其中(a,q)=1, a,q∈Z。

那我们怎么来求这个逆元呢?下面介绍三种办法。

1.扩展欧几里得定理

  贴一个自家广告:https://blog.csdn.net/weixin_43874261/article/details/86410519

我们知道,扩展欧几里得定理可以用来解形如\large ax+by=(a,b) ((a,b,y,x∈Z,|a+b|>0),(a,b)为a和b的最大公约数)这样的一元二次方程,根据上边的\large ax\equiv 1(mod q)方程可知这样的关系:\large ax+kq=1(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)。

我们把\large ax\equiv 1(mod a) 与 \large a^{p-1}\equiv 1 (mod p)放在一起,相比各位读者立马就可以得到\large x=a^{p-2}这个解,求出它是很简单的,但是为了降低时间复杂度,笔者极力推荐“快速幂”算法。z

3.线性求逆元公式

  1. 首先,设\large a=\frac{c}{i},\large b\equiv c(mod i)
  2. 则有\large a*i+b\equiv 0(mod c),即\large -a*i\equiv b(mod c)
  3. 两边同除\large i*b,得到\large -a*inv(b)\equiv inv(i)(mod c)
  4. 将a和b代回,得到\large inv(i)=(c-\frac{c}{i})*inv((c)mod i)mod i

  这个办法适用于求大量逆元,上边的两个办法适用于求单个逆元。

猜你喜欢

转载自blog.csdn.net/weixin_43874261/article/details/87830924