数学:乘法逆元-拓展GCD
乘法逆元应用在组合数学取模问题中,这里给出的实现不见得好用
给出拓展GCD算法:
扩展欧几里得算法是指对于两个数a,b 一定能找到x,y(均为整数,但不满足一定是正数) 满足x*a+y*b=gcd(a,b) gcd(x,y)是指x 与 y的最大公约数
有啥用呢?求解形如 a*x +b*y = c 的通解
然后我们先介绍同余方程,再介绍乘法逆元
同余方程 a≡b(mod m) 等价于小学的运算式 b÷m 余数为a 也就是a mod m=b
其实介绍这个就是看怎么把≡拿掉
乘法逆元 ax ≡ 1 (mod m) 我们称 x 是 a 关于 m 的乘法逆元 可以等价于这样的表达式: a*x + m*y = 1
当满足这个式子的时候:a*x + b*y = c 有解的充要条件: c % gcd(a , b) == 0
一般,我们能够找到无数组解满足条件,但是一般是让你求解出最小的那组解
我们求解出来了一个特殊的解 x0 ,我们用 x0 % m其实就得到了最小的解了
1 #include<cstdio> 2 using namespace std; 3 inline long long read() 4 { 5 long long x=0,f=1;char ch=getchar(); 6 while(ch<'0'||ch>'9') {if(ch=='-')f=-1;ch=getchar();} 7 while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();} 8 return x*f; 9 } 10 int a,b; 11 void exgcd(int a,int b,int &x,int &y) 12 { 13 if(b==0) {x=1;y=0;return;} 14 exgcd(b,a%b,x,y); 15 int t=x;x=y;y=t-a/b*y; 16 } 17 //ax ≡ 1 (mod b) 18 //-> a*x + b*y = 1 19 //->求出x和y后让x%b就是最小解了 20 int main() 21 { 22 a=read();b=read(); 23 int x,y; 24 exgcd(a,b,x,y); 25 x=(x%b+b)%b; 26 printf("%d",x); 27 return 0; 28 }
转载于:https://www.cnblogs.com/aininot260/p/9480161.html
数学:乘法逆元-拓展GCD相关推荐
- 数学--数论--HDU 4675 GCD of Sequence(莫比乌斯反演+卢卡斯定理求组合数+乘法逆元+快速幂取模)
先放知识点: 莫比乌斯反演 卢卡斯定理求组合数 乘法逆元 快速幂取模 GCD of Sequence Alice is playing a game with Bob. Alice shows N i ...
- 礼物(中国剩余定理+拓展gcd求逆元+分治=拓展Lucus)
礼物 题意: 求\[C(n,m)\ \%\ p\] \(n,m,p\le 10^9\),且若\(p=\prod_{i=1}^{k}{p_i}^{c_i}\),则\(\forall i\in [1..k ...
- gcd + 扩展欧几里得定理+递推乘法逆元(模板)
gcd: int gcd(int a, int b){ return b==0? a: gcd(b, a%b); } 扩张欧几里得定理: 扩展欧几里德算法是用来在已知a, b求解一组x,y使得ax+b ...
- 乘法逆元 +数论分块 +平方和公式
年后准备学习啦,开学还得准备考试. 乘法逆元: 因为涉及到除法,所以取余这个操作就错误. 所以如果我们要求(a/b)%mod,我们可以假设 (a/b)%mod = a*c%mod 那么c就是b的逆元. ...
- 乘法逆元通俗易懂的理解方法
最近,发现数论真的很重要,基本上一套题必出一个数论的题.故接下来,要好好的看一看数论了. 乘法逆元我觉得其本质:就是数论里的倒数. 由上图你会发现:其取模的运算不满足除法的分配律,那么如何求除法的模运 ...
- 【算法与数据结构】——乘法逆元
定义 若在mod p意义下,对于一个整数a,有a*b≡1(mod p),那么这个整数b即为a的 乘法逆元,同时a也为b的乘法逆元 一个数有逆元的充分必要条件是gcd(a,p)=1,此时a才有对p的乘法 ...
- 扩展欧几里得算法、乘法逆元与中国剩余定理
文章目录 前言 定义.定理和部分证明 整除 定义 定理 定理的证明 同余 定义 同余的性质 同余的运算律 运算律的证明 扩展欧几里得算法 代码模板 算法详解 乘法逆元 求解逆元 乘法逆元的作用 中国剩 ...
- 整数a关于模m的乘法逆元
文章目录 模m的乘法逆元 定义 迭代算法 数学归纳法证明 C++代码实现 递归算法 扩展欧几里得算法 代码实现 写法一: 简单证明: 写法二: 简单证明: 算法实现 相关联想以及应用 结尾 模m的乘法 ...
- 乘法逆元之欧几里得和扩展欧几里得
乘法逆元 文章目录 乘法逆元 一.模运算的性质 二.除法的模运算 1.除法模运算 2.解决除法模运算问题 三.乘法逆元 1.定义 2.**逆元是干什么的呢** 四.求解逆元 1.费马小定理 2.扩展欧 ...
最新文章
- Linux 下安装 Oracle9i
- [转载]Sql Server 日期格式转换
- 编程实现newton插值c++_数据体操:数据处理和IDW地理插值算法
- cups源码下载 linux_正点原子Linux第七十章Linux WIFI驱动实验
- 如何用纯 CSS 创作背景色块变换的按钮特效
- python连接数据库oracle_python 连接oracle数据库:cx_Oracle
- 25.MySQL sql_mode
- 区块链3.0时代:你现在所有的认知将会被颠覆
- ArcGIS地形图配准并生成三维模型(附练习数据下载)
- java元组_Java中元组的使用
- python身份证号码共18位_用Python写一个身份证号码校验工具
- 华为nova8和华为nova8Plus哪个好-华为nova8和华为nova8Plus区别-哪个更值得入手-参数对比
- 示例:Linux设备属性节点驱动,以及cat, echo操作
- 股市预测,销量预测,病毒传播...一个时间序列建模套路搞定全部!⛵
- 怎么修改服务器文件写入权限,怎么修改服务器本地写入权限设置
- STM32学习心得十七:窗口看门狗(WWDG)实验及旧知识点复习
- 如何选择漏电保护器规格型号_漏电保护器该怎么选择呢?
- 2021秋软工实践第一次结对编程作业-需求分析
- 微型计算机控制技术中南大学,中南大学2013微型计算机控制技术试题及答案教程.doc...
- DE-LiDAR TFmini 激光雷达测距
热门文章
- StatusCodeError: 400 - “{\“code\“:40000,\“error\“:\“错误 Error: 登录用户不是该小程序的开发者
- 我对CSS vertical-align的一些理解与认识(二)
- 禁止摄像机跟随`Actor`旋转 Learn Unreal Engine (with C++)
- python如何使用字典中的值并进行比较_python嵌套字典比较值与取值的实现示例
- 高斯混合模型聚类_GMM: Gaussian Mixed Model(高斯混合模型)
- 案例八:shell自动化管理账本脚本
- jzoj4640. 【GDOI2017模拟7.15】妖怪
- appium()-The event firing
- linux/unix下setuid/seteuid/setreuid/setresuid
- [转]HDFS用户指南(中文版)