逆元详解
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
相关文章推荐
- 逆元详解
- 逆元详解 求逆元的方法汇总
- 逆元详解
- CodeForces 300C C. Beautiful Numbers (数论 + 逆元 + 详解)
- 逆元详解
- 卢卡斯定理的详解和线性求解逆元(含题目)
- 逆元详解
- 逆元详解
- ubuntu网络设置详解
- 函数指针详解
- Linux LVM 的使用详解
- request.getcontextPath()_详解
- XMPP SI FileTransfer服务传输文件过程详解
- log4j.properties配置详解
- ShellExecute 函数详解 (VC)
- 【多媒体封装格式详解】---MP4【2】
- linux sort 命令详解
- 高性能Mysql主从架构的复制原理及配置详解
- AndroidManifest.xml文件详解
- Linux root忘记密码如何登陆-详解