除法求逆元(扩展欧几里德和费马小定理)
来源:互联网 发布:网络尖兵破解软件 编辑:程序博客网 时间:2024/06/10 06:18
我们都知道除法不满足取模,那么我们可以求模的逆元来进行求结果,既然乘法可以取模,如果这个数除以一个数,那么我们可以让他乘以一个数使得和除以那个数的结果相同,那么乘的这个数就是那个数的乘法逆元。下面摘自Acdreamer的博客
今天我们来探讨逆元在ACM-ICPC竞赛中的应用,逆元是一个很重要的概念,必须学会使用它。
对于正整数和,如果有,那么把这个同余方程中的最小正整数解叫做模的逆元。
逆元一般用扩展欧几里得算法来求得,如果为素数,那么还可以根据费马小定理得到逆元为。
推导过程如下
求现在来看一个逆元最常见问题,求如下表达式的值(已知)
当然这个经典的问题有很多方法,最常见的就是扩展欧几里得,如果是素数,还可以用费马小定理。
但是你会发现费马小定理和扩展欧几里得算法求逆元是有局限性的,它们都会要求与互素。实际上我们还有一
种通用的求逆元方法,适合所有情况。公式如下
现在我们来证明它,已知,证明步骤如下
下面是两个求乘法逆元的模板
辗转相除法求逆元(求a对于mod的逆元, 要求a与mod互素)
ll exgcd(ll a, ll b, ll &x, ll &y){ if (b == 0) { x = 1; y = 0; return a; } ll r = exgcd(b, a % b, x, y); ll t = x % mod; x = y % mod; y = ((t - a / b * y) % mod + mod) % mod; return r;}求2对于1e9+7的逆元就是 exgcd(2, 1e9+7, x, y),其中x的值就是inv2,
费马小定理求逆元(求a对于mod的逆元,要求mod为素数)
ll power_mod(ll a, ll b, ll mod){ ll ans = 1; while (b) { if (b & 1) ans = ans * a % mod; a = a * a % mod; b >>= 1; } return ans;}inv2 = power_mod(a, mod - 2, mod);
0 0
- 除法求逆元(扩展欧几里德和费马小定理)
- 除法求逆元(扩展欧几里德和费马小定理)
- 欧几里德辗转相除法 费马小定理 欧拉定理 扩展欧几里德算法简介
- 扩展欧几里德定理
- 扩展欧几里德定理
- 扩展欧几里德定理
- 欧几里得除法和扩展欧几里得定理
- 欧几里德和扩展欧几里德
- 除法取模逆元,扩展欧几里得,费马小定理[数学]
- 再说中国剩余定理、扩展欧几里德和同余方程组
- [2015.2.8] 看了扩展欧几里德和 裴蜀定理
- pku 1061 欧几里德扩展定理
- 欧几里德和扩展欧几里德算法
- 欧几里德和扩展欧几里德算法
- 复习数学之中国剩余定理和欧拉定理和扩展欧几里德
- hdu3037 Saving Beans(Lucas定理+费马小定理or扩展欧几里德算发)
- 关于扩展欧几里德定理的题目
- POJ 2891 扩展欧几里德&&中国剩余定理
- 用js生成N个不一样的随机数
- 百度前端学院2015task2自学总结
- NOJ 1001 二分查找
- 2014ACM/ICPC亚洲区鞍山赛区现场赛 题解
- Servlet的生命周期
- 除法求逆元(扩展欧几里德和费马小定理)
- php源码之路第三章第六节( 变量的作用域和global语句)
- centos 7.2 防火墙配置
- 用string类构造器创建对象
- [已解决]mac android studio安装报错java.lang.RuntimeException: java.lang.IllegalArgumentException: Argument
- 数据结构看书笔记(九)--图的存储结构及遍历
- shell脚本 for循环迭代文件
- 最大子段和
- 理解java异常处理机制