Extended_gcd应用之求逆元

本文介绍了逆元的概念及其在除法取模中的应用,包括扩展欧几里得算法和小费马定理两种求逆元的方法。通过举例和解析算法,阐述了如何利用逆元解决求模运算的问题,并提供了相关的编程竞赛题目作为实践示例。
摘要由CSDN通过智能技术生成

http://blog.csdn.net/only_air/article/details/51675261推荐我哥们的讲的逆元,当然也可以看我写的偷笑吐舌头

下面来看看逆元的定义的用处:

逆元应用于除法取模之中,有两种求法,扩展欧几里得和小费马定理;

1. 扩展欧几里得适用于任何情况,下面介绍Euclid的Extended——gcd求逆元:

比如:如果(a * b)% mod == 1 ,那么的话a  和 b 互为逆元,已知 a,和 mod 就能求出a的逆元,相同地,已知b和mod就能求出b的逆元b了,不过对应的存在逆元的条件是

  a % mod 的逆元存在的充要条件是 a和 mod 互质,即gcd( a , mod ) ==1 ;类似地,求b %mod 的逆元也是一样的。

然后求逆元的方法是:

比如求a % mod的逆元b,则利用方程  a * x + mod  * y == 1;利用Extended_gcd()扩展欧几里得求出x 的值就是a % mod 的逆元, 这个方程的 y 代表的是 mod % a 的逆元。

利用同模方程求出的x经过最小正数操作就是逆元了,即(x% mod +mod)%mod;


有了逆元就可以进行一些巧妙的操作:

比如要求 ( a/b)%mod的值,如果gcd( b , mod ) == 1,设p 是 b % mod的逆元,即 (b * p)% mod ==1,所以(a/b) % mod == (a * p) % mod;

(a/b)%Mod=c;    (b*p)%Mod=1;    ==》   (a/b)*(b*p) %Mod=c;    ==》    (a*p)%Mod=c;

利用b * x +mod * y =1 和扩展gcd就可以求出a 的逆元p,代入,结果就可以出来了。

2.小费马定理适用于mod为质数的去情况,比如求(a/b)%mod,这样的话就要求b %mod的逆元,如果mod是质数的话,就可以利用 b ^(mod - 2)  % mod,其实就相当于转到了快速幂的模块了,敲一个快速幂就出来了。微笑

下面来说说小费马定理:

费马小定理:对于质数 p 和任意整数 a,有 a ^ p ≡ a (mod p)
将两边同时约去一个 a,则有 a ^ (p - 1) ≡ 1(mod p)


解决a/b的另一个方法:

3.当除数不存在逆元并且b|a,那么a/b % mod = a % (b * mod) /b % mod;

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值