定义

若在mod p意义下,对于一个整数a,有a*b≡1(mod p),那么这个整数b即为a的 乘法逆元,同时a也为b的乘法逆元
一个数有逆元的充分必要条件是gcd(a,p)=1,此时a才有对p的乘法逆元

逆元的作用

首先对于除法取模不成立,即(a/b)modp≠(amodp/bmodp)modp(a/b) \mod p \neq (a \mod p / b \mod p) \mod p(a/b)modp​=(amodp/bmodp)modp。

显然数学家们是不能忍受这种局面的,他们扔出了“逆元”来解决这个问题。

因为取模运算对于乘法来说是成立的,逆元就是把除法取模运算转化为乘法取模运算
(a/b)%p=m -------- 1
假设存在一个数x满足
a*x%p=m ------- 2

由模运算对乘法成立,对1式两边同时乘以 b ,得到:a%p=(m(b%p))%p
如果 a 和 b 均小于模数 p 的话,上式可以改写为:a =bm%p
等式两边再同时乘以 x, 联立2式比较得到:ax%p=m%p=xbm%p
因此可以得到:bx%p=1

哎,x是b的逆元呀(x 在模运算的乘法中等同于 1/b, 这就是逆元的意义)
由以上过程我们看到,求取 (a/b)%p 等同于 求取 a∗(b的逆元)%p。 因此,求模运算的除法问题就转化为就一个数的逆元问题了。

求逆元的方法

因为在算法竞赛中模数p总是质数,所以可以利用费马小定理 :
bp−1modp=1b^{p−1}\mod p=1bp−1modp=1
可以直接得到
所以bp−2b^{p-2}bp−2即为b在 mod p 意义下的逆元

ll pow(ll a, ll n, ll p)    //快速幂 a^n % p
{ll ans = 1;while(n){if(n & 1) ans = ans * a % p;a = a * a % p;n >>= 1;}return ans;
}ll niyuan(ll a, ll p)   //费马小定理求逆元
{return pow(a, p - 2, p);
}

还可以利用扩展欧几里德算法

void exgcd(ll a, ll b, ll &x, ll &y)    //拓展欧几里得算法
{if(!b) x = 1, y = 0;else{exgcd(b, a % b, y, x);y -= x * (a / b);}
}ll niyuan(ll a, ll b)   //求a对b取模的逆元
{ll x, y;exgcd(a, b, x, y);return (x + b) % b;
}

【算法与数据结构】——乘法逆元相关推荐

  1. 扩展欧几里得算法、乘法逆元与中国剩余定理

    文章目录 前言 定义.定理和部分证明 整除 定义 定理 定理的证明 同余 定义 同余的性质 同余的运算律 运算律的证明 扩展欧几里得算法 代码模板 算法详解 乘法逆元 求解逆元 乘法逆元的作用 中国剩 ...

  2. Matlab实现求解乘法逆元实验

    一.实验目的 熟悉求解乘法逆元的算法.在此基础上,选择一种算法,通过运用高级程序设计语言,设计并实现一个计算乘法逆元运算器. 二.实验原理 [定义]对于整数a,m,如果存在整数b,满足ab mod m ...

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

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

  4. 欧几里德算法与扩展的欧几里德算法及乘法逆元

    欧几里德算法与扩展的欧几里德算法及乘法逆元 欧几里德算法 扩展的欧几里德算法 乘法逆元 以下提到的数都是整数. 欧几里德算法 欧几里德算法用于求解最大公倍数,也就是辗转相除法.其结论非常简洁,对任意整 ...

  5. 扩展欧几里德算法计算乘法逆元详解

    乘法逆元的定义: A * X MOD N == 1则称X为A关于模N的乘法逆元. 注: 只有两个数互素的时候才会有乘法逆元. 两个数不互素是没有乘法逆元的. 费马小定理: 利用费马小定理只能求出N为素 ...

  6. 格雷通路 算法 java,Java算法与数据结构教程

    北上广容不下肉身, 三四线放不下灵魂, 程序员里没有穷人, 有一种土豪叫 算法工程师. 程序 = 数据结构 + 算法 程序是为了解决实际问题而存在的.然而为了解决问题,必定会使用到某些数据结构以及设计 ...

  7. P5431 【模板】乘法逆元2(小学数学题,毒瘤鱼,卡常之王yyds)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 P5431 [模板]乘法逆元2 题目传送门 题目大意: 给定 nnn 个正整数 aia_iai​ ,求 ...

  8. luogu P2613 【模板】有理数取余(费马小定理,乘法逆元)

    整理的算法模板合集: ACM模板 目录 题目传送门 题目传送门 相当于是一个高精的费马小定理求乘法逆元.虽然数据达到了101000110^{10001}1010001,但是我们可以使用快读然后一直模m ...

  9. luogu P5142 区间方差(线段树、乘法逆元)

    luogu P5142 区间方差 本题要求维护模区间方差,很明显是一道数据结构题. 我们化简方差公式: 而平均数等于 可以发现,我们只需要维护序列的区间和和区间平方和,就可以维护平均数和方差. 区间和 ...

最新文章

  1. Java项目:网上选课系统(java+SSM+jsp+mysql+maven)
  2. android studio字符串转整型,Android Studio 中的FindBugs插件使用,轻松帮你发现Bug (转)...
  3. html5三国策略布阵,丰神三国怎样布阵 布阵方法推荐
  4. WebCombo 客户端绑定数据
  5. 测试用例设计方法 - 场景分析法
  6. hive shell 导入数据
  7. c++多边形扫描线填充算法_python 小乌龟turtle画随机正多边形
  8. Oracle入门第二天(下)——单行函数
  9. Linux x86_64内核中断初始化
  10. Windows 7 驱动开发
  11. java判断一个数是否为素数的程序_java如何判断一个数是否为素数
  12. 2021-09-27 人民邮电出版社网址下获取新书推荐的所有图书名称
  13. 键盘按键介绍及快捷键
  14. matlab 分子动力学,两体的分子动力学模型-MATLAB源程序
  15. VJ第一周算法题(A - Mud Puddles)
  16. 【HUSTOJ】1022: 输出小写字母表
  17. 证件照换底色,快速简单!(附去水印宝藏工具)
  18. Dubbo监控中心Dubbo-admin安装
  19. Leedcode编程题18: 四数之和----C++实现
  20. oracle中的存储过程是什么,oracle存储过程是什么?

热门文章

  1. Chrome 录屏神器 Screenity
  2. 0.96寸OLED显示屏标准库移植HAL库(模拟IIC) - 基于STM32
  3. 【轻聊前端】JavaScript中的数字游戏
  4. TCP协议的相关特性
  5. 2015私人阅读十五佳
  6. 北邮智能车仿真培训(八)—— 两轮摄像头平衡车
  7. 【315】备份全盘和备份C盘的区别
  8. Android Room提示 错误: Not sure how to convert a Cursor to this method's return type的原因及解决办法
  9. maya计算机内存不足请保存,Word突然出现无法保存内存不足怎么办
  10. 人类小行星探测任务回顾