【算法与数据结构】——乘法逆元
定义
若在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;
}
【算法与数据结构】——乘法逆元相关推荐
- 扩展欧几里得算法、乘法逆元与中国剩余定理
文章目录 前言 定义.定理和部分证明 整除 定义 定理 定理的证明 同余 定义 同余的性质 同余的运算律 运算律的证明 扩展欧几里得算法 代码模板 算法详解 乘法逆元 求解逆元 乘法逆元的作用 中国剩 ...
- Matlab实现求解乘法逆元实验
一.实验目的 熟悉求解乘法逆元的算法.在此基础上,选择一种算法,通过运用高级程序设计语言,设计并实现一个计算乘法逆元运算器. 二.实验原理 [定义]对于整数a,m,如果存在整数b,满足ab mod m ...
- 乘法逆元 java_java写的三个求乘法逆元的算法
java写的三个求乘法逆元的算法: 第一个是著名的扩展欧拉算法 第二个是网上发现的一个牛人写的算法 第三个是我这个菜鸟补充的一个最垃圾的算法 在对较小的数进行运算的时候,后两种算法都比第一个快,第三个 ...
- 欧几里德算法与扩展的欧几里德算法及乘法逆元
欧几里德算法与扩展的欧几里德算法及乘法逆元 欧几里德算法 扩展的欧几里德算法 乘法逆元 以下提到的数都是整数. 欧几里德算法 欧几里德算法用于求解最大公倍数,也就是辗转相除法.其结论非常简洁,对任意整 ...
- 扩展欧几里德算法计算乘法逆元详解
乘法逆元的定义: A * X MOD N == 1则称X为A关于模N的乘法逆元. 注: 只有两个数互素的时候才会有乘法逆元. 两个数不互素是没有乘法逆元的. 费马小定理: 利用费马小定理只能求出N为素 ...
- 格雷通路 算法 java,Java算法与数据结构教程
北上广容不下肉身, 三四线放不下灵魂, 程序员里没有穷人, 有一种土豪叫 算法工程师. 程序 = 数据结构 + 算法 程序是为了解决实际问题而存在的.然而为了解决问题,必定会使用到某些数据结构以及设计 ...
- P5431 【模板】乘法逆元2(小学数学题,毒瘤鱼,卡常之王yyds)
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 P5431 [模板]乘法逆元2 题目传送门 题目大意: 给定 nnn 个正整数 aia_iai ,求 ...
- luogu P2613 【模板】有理数取余(费马小定理,乘法逆元)
整理的算法模板合集: ACM模板 目录 题目传送门 题目传送门 相当于是一个高精的费马小定理求乘法逆元.虽然数据达到了101000110^{10001}1010001,但是我们可以使用快读然后一直模m ...
- luogu P5142 区间方差(线段树、乘法逆元)
luogu P5142 区间方差 本题要求维护模区间方差,很明显是一道数据结构题. 我们化简方差公式: 而平均数等于 可以发现,我们只需要维护序列的区间和和区间平方和,就可以维护平均数和方差. 区间和 ...
最新文章
- Java项目:网上选课系统(java+SSM+jsp+mysql+maven)
- android studio字符串转整型,Android Studio 中的FindBugs插件使用,轻松帮你发现Bug (转)...
- html5三国策略布阵,丰神三国怎样布阵 布阵方法推荐
- WebCombo 客户端绑定数据
- 测试用例设计方法 - 场景分析法
- hive shell 导入数据
- c++多边形扫描线填充算法_python 小乌龟turtle画随机正多边形
- Oracle入门第二天(下)——单行函数
- Linux x86_64内核中断初始化
- Windows 7 驱动开发
- java判断一个数是否为素数的程序_java如何判断一个数是否为素数
- 2021-09-27 人民邮电出版社网址下获取新书推荐的所有图书名称
- 键盘按键介绍及快捷键
- matlab 分子动力学,两体的分子动力学模型-MATLAB源程序
- VJ第一周算法题(A - Mud Puddles)
- 【HUSTOJ】1022: 输出小写字母表
- 证件照换底色,快速简单!(附去水印宝藏工具)
- Dubbo监控中心Dubbo-admin安装
- Leedcode编程题18: 四数之和----C++实现
- oracle中的存储过程是什么,oracle存储过程是什么?
热门文章
- Chrome 录屏神器 Screenity
- 0.96寸OLED显示屏标准库移植HAL库(模拟IIC) - 基于STM32
- 【轻聊前端】JavaScript中的数字游戏
- TCP协议的相关特性
- 2015私人阅读十五佳
- 北邮智能车仿真培训(八)—— 两轮摄像头平衡车
- 【315】备份全盘和备份C盘的区别
- Android Room提示 错误: Not sure how to convert a Cursor to this method's return type的原因及解决办法
- maya计算机内存不足请保存,Word突然出现无法保存内存不足怎么办
- 人类小行星探测任务回顾