(数学渣,下面的文字可能有误,欢迎指教)
乘法逆元的定义貌似是基于群给出的,比较简单地理解,可以说是倒数的概念的推广。记a的关于模p的逆元为a^-1,则a^-1满足aa^-1≡ 1(mod p)

加减乘与模运算的顺序交换不会影响结果,但是除法不行。有的题目要求结果mod一个大质数,如果原本的结果中有除法,比如除以a,那就可以乘以a的逆元替代。

在mod p的运算中,a存在乘法逆元当且仅当a与p互质。一般题目给的是一个大质数,所以只要a不是p的倍数,就以求乘法逆元。

目前了解到的求法有三种:
1.扩展欧几里得。aa^-1≡ 1(mod p),可以转换为aa^-1 + py = 1,即是扩展欧几里得所能解的ax + by = gcd(a, b)。最常用的解法。

int x, y;
int extgcd(int a, int b, int &x, int &y)
{if (b == 0){x = 1;y = 0;return a;}int gcd = exgcd(b, a % b, x, y);int tmp = x;x = y;y = tmp - (a/b) * y;return gcd;
}/*
求解ax+by=gcd(a,b),亦即ax≡1(mod b)。函数返回值是a,b的最大公约数,而x即a的逆元。
注意a, b不能写反了。
*/

2.由费马小定理a^(p-1)≡ 1(mod p)(p为素数),稍作变形即是 aa^(p-2)≡ 1(mod p),是不是发现了,a^(p-2)即是a的逆元,这个可以用快速幂来求。

3.网上看到的一个很厉害的o(n)的递推,求前n个逆元,不知道是怎么推出来的,但是可以简单地证明一下正确性(要求所mod p为素数)。

首先,1的逆元是1,没什么疑问。
假设前i个数的逆元已经求出,那么
i^-1 = (p%i)^-1 * (p - [p/i]) % p。其中[]表示去尾取整。
(p%i)^-1其实就是(p-[p/i]i)^-1,然后我们左右乘以i,
ii^-1 = (p-[p/i]i)^-1 * ((i-1)p + p-[p/i]i) % p,
其实就是ii^-1 = k^-1 * ((i-1)p + k) % p = 0 + 1 = 1,这样就证完了=。=

//字体真糟糕。。

int[] inv = new int[MAXN];
inv[1] = 1;
for (int i = 2; i<MAXN; i++)inv[i] = inv[MOD%i]*(MOD-MOD/i)%MOD;

今天我们来探讨逆元在ACM-ICPC竞赛中的应用,逆元是一个很重要的概念,必须学会使用它。

对于正整数,如果有,那么把这个同余方程中的最小正整数解叫做的逆元。

逆元一般用扩展欧几里得算法来求得,如果为素数,那么还可以根据费马小定理得到逆元为

推导过程如下

求现在来看一个逆元最常见问题,求如下表达式的值(已知

当然这个经典的问题有很多方法,最常见的就是扩展欧几里得,如果是素数,还可以用费马小定理。

但是你会发现费马小定理和扩展欧几里得算法求逆元是有局限性的,它们都会要求互素。实际上我们还有一

种通用的求逆元方法,适合所有情况。公式如下

现在我们来证明它,已知,证明步骤如下

逆元详解:    http://blog.csdn.net/acdreamers/article/details/8220787

求乘法逆元的几种方法相关推荐

  1. java求乘法逆元的代码_求乘法逆元的几种方法

    (数学渣,下面的文字可能有误,欢迎指教) 乘法逆元的定义貌似是基于群给出的,比较简单地理解,可以说是倒数的概念的推广.记a的关于模p的逆元为a^-1,则a^-1满足aa^-1≡ 1(mod p) 加减 ...

  2. 计蒜客 2017 ACM-ICPC 亚洲区(西安赛区)网络赛 B coin(求乘法逆元)

    Bob has a not even coin, every time he tosses the coin, the probability that the coin's front face u ...

  3. 乘法逆元通俗易懂的理解方法

    最近,发现数论真的很重要,基本上一套题必出一个数论的题.故接下来,要好好的看一看数论了. 乘法逆元我觉得其本质:就是数论里的倒数. 由上图你会发现:其取模的运算不满足除法的分配律,那么如何求除法的模运 ...

  4. 乘法逆元 java_java写的三个求乘法逆元的算法

    java写的三个求乘法逆元的算法: 第一个是著名的扩展欧拉算法 第二个是网上发现的一个牛人写的算法 第三个是我这个菜鸟补充的一个最垃圾的算法 在对较小的数进行运算的时候,后两种算法都比第一个快,第三个 ...

  5. c语言数组最大可定义多少位_C语言求数组的最大值三种方法

    /* 黄哥Python培训 黄哥所写*/#include int maxValue(int* arr, int n);int maxRecursionValue(int* arr, int n);in ...

  6. 金字塔型php的9x9乘法口诀表,python中打印金字塔和九九乘法表的几种方法

    # 打印九九乘法表 for i in range(1,10): for j in range(1,i+1): # x=i*j # print(i,'*',j,'=',x,end=' ') print( ...

  7. c语言实现求最大公约数的三种方法

    一.最大公约数 最大公因数,也称最大公约数.最大公因子,指两个或多个整数共有约数中最大的一个.a,b的最大公约数记为(a,b),同样的,a,b,c的最大公约数记为(a,b,c),多个整数的最大公约数也 ...

  8. matlab求pi值的三种方法

    https://www.icourse163.org/learn/CSU-1002475002?tid=1450231442#/learn/content?type=detail&id=121 ...

  9. 表格法轻松理解扩展欧几里得算法以及利用其求乘法逆元

    文章目录 扩展欧几里得算法 求乘法逆元 扩展欧几里得算法 具体算法的原理参见扩展欧几里得算法求乘法逆元,本文仅以表格的形式展现计算过程,浅显易懂.下面通过例子进行说明. 例:求1234和4321的最大 ...

最新文章

  1. CentOS下安装ZooKeeper
  2. Java基础篇:String、StringBuffer、StringBuilder
  3. LTE各场景下的密钥处理
  4. iOS CoreAnimation
  5. Redis总结集群方式之主从复制
  6. python中str转unicode_python将unicode和str互相转化的实现
  7. nginx php 5.5 安装,Nginx1.5与PHP5.5安装文档
  8. java三大特性之—封装
  9. 光学三原色与色的三原色
  10. 2017 linux wine 迅雷,wine 迅雷下载安装(wine 迅雷极速版)【Linux上用迅雷7】
  11. linux man 命令 详解
  12. 基于matlab山脊线,教你如何利用水文,分析提取山脊线山谷线
  13. Java-用类描述人之间的血缘关系
  14. 折腾:如何让你的老电脑快起来
  15. 音乐播放时跳动的音符
  16. pfx格式是什么文件
  17. Java程序员秋招面经大合集(BAT美团网易小米华为中兴等)
  18. HDFS块副本的冗余度构建流程
  19. 2018福大软工实践第四次作业
  20. GEE哨兵二号去云不成功的原因(代码修改)

热门文章

  1. 自然科学 计算机,计算机科学与自然科学技术的关系
  2. 报告解读丨基于消费者洞察的鞋服品牌数字化营销新思路
  3. JavaScript:从此不再怕闭包
  4. 编译x86架构的openwrt系统,让笔记本从u盘启动openwrt
  5. 设计模式(二) 工厂模式
  6. mysql utc 下取得昨天的时间段。
  7. python 调试命令
  8. LINUX内核经典面试题
  9. price ceiling
  10. 硕士:论文提交和考试