您的位置:首页 > 其它

逆元详解

2019-08-20 20:24 1336 查看

START

为什么需要求逆元?

显然对于加减乘运算都会满足:

  (a+b)%p=a%p+b%p

  (a-b)%p=a%p-b%p

  (a*b)%p=a%p*(b%p)

但是对于除法而言(a/b)%p!=(a%p)/(b%p),这个可以通过举例验证一下或者可以通过(b%p)可以为0但是分母不能为0得到对于除法而言不满足这个运算的结论。

但是如果非要求(a/b)%p要怎么办呢?

这个时候就用到了逆元。

设b的逆元x,再设(b*x)=1  (mod p)

首先证明这个x就是b相对于p的逆元:我们对(a/b)上下同时乘x,则(a*x/(b*x))%p=a*x%p(分母为1),这个x就是b相对于p的逆元,注意这个说法,是b相对于p的逆元,单纯说某个数的逆元是没有意义的,只有说某个数相对于某个模数的逆元才有意义。

接下来是怎么求逆元:

求逆元依据的式子是(b*x)=1 (mod p)

求逆元有两种方法:

1.运用费马小定理:a^(p-1) =1 (mod p),a,p互质

式子左边a^(p-1)=a*a^(p-2),那么有a*a^(p-2)=1 (mod p)

对比b*x = 1 (mod p),显然x=b^(p-2),接来下直接快速幂就行了

2.运用扩欧

我们将(b*x) = 1 (mod p),改写成b*x+k*p=1。

对于b*x+k*p=1 (一般k<0)这个式子,我们知道(b*x+k*p)%p=1。

对比扩欧的a'x'+b'y'=gcd(a,b)。

得到:a'=b,x'=x,b'=p,gcd(a,b)=1。

通过exgcd(b,p,x,y)可以求出逆元x。

 

END

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: