乘法逆元应用在组合数学取模问题中,这里给出的实现不见得好用

给出拓展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相关推荐

  1. 数学--数论--HDU 4675 GCD of Sequence(莫比乌斯反演+卢卡斯定理求组合数+乘法逆元+快速幂取模)

    先放知识点: 莫比乌斯反演 卢卡斯定理求组合数 乘法逆元 快速幂取模 GCD of Sequence Alice is playing a game with Bob. Alice shows N i ...

  2. 礼物(中国剩余定理+拓展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 ...

  3. gcd + 扩展欧几里得定理+递推乘法逆元(模板)

    gcd: int gcd(int a, int b){ return b==0? a: gcd(b, a%b); } 扩张欧几里得定理: 扩展欧几里德算法是用来在已知a, b求解一组x,y使得ax+b ...

  4. 乘法逆元 +数论分块 +平方和公式

    年后准备学习啦,开学还得准备考试. 乘法逆元: 因为涉及到除法,所以取余这个操作就错误. 所以如果我们要求(a/b)%mod,我们可以假设 (a/b)%mod = a*c%mod 那么c就是b的逆元. ...

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

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

  6. 【算法与数据结构】——乘法逆元

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

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

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

  8. 整数a关于模m的乘法逆元

    文章目录 模m的乘法逆元 定义 迭代算法 数学归纳法证明 C++代码实现 递归算法 扩展欧几里得算法 代码实现 写法一: 简单证明: 写法二: 简单证明: 算法实现 相关联想以及应用 结尾 模m的乘法 ...

  9. 乘法逆元之欧几里得和扩展欧几里得

    乘法逆元 文章目录 乘法逆元 一.模运算的性质 二.除法的模运算 1.除法模运算 2.解决除法模运算问题 三.乘法逆元 1.定义 2.**逆元是干什么的呢** 四.求解逆元 1.费马小定理 2.扩展欧 ...

最新文章

  1. Linux 下安装 Oracle9i
  2. [转载]Sql Server 日期格式转换
  3. 编程实现newton插值c++_数据体操:数据处理和IDW地理插值算法
  4. cups源码下载 linux_正点原子Linux第七十章Linux WIFI驱动实验
  5. 如何用纯 CSS 创作背景色块变换的按钮特效
  6. python连接数据库oracle_python 连接oracle数据库:cx_Oracle
  7. 25.MySQL sql_mode
  8. 区块链3.0时代:你现在所有的认知将会被颠覆
  9. ArcGIS地形图配准并生成三维模型(附练习数据下载)
  10. java元组_Java中元组的使用
  11. python身份证号码共18位_用Python写一个身份证号码校验工具
  12. 华为nova8和华为nova8Plus哪个好-华为nova8和华为nova8Plus区别-哪个更值得入手-参数对比
  13. 示例:Linux设备属性节点驱动,以及cat, echo操作
  14. 股市预测,销量预测,病毒传播...一个时间序列建模套路搞定全部!⛵
  15. 怎么修改服务器文件写入权限,怎么修改服务器本地写入权限设置
  16. STM32学习心得十七:窗口看门狗(WWDG)实验及旧知识点复习
  17. 如何选择漏电保护器规格型号_漏电保护器该怎么选择呢?
  18. 2021秋软工实践第一次结对编程作业-需求分析
  19. 微型计算机控制技术中南大学,中南大学2013微型计算机控制技术试题及答案教程.doc...
  20. DE-LiDAR TFmini 激光雷达测距

热门文章

  1. StatusCodeError: 400 - “{\“code\“:40000,\“error\“:\“错误 Error: 登录用户不是该小程序的开发者
  2. 我对CSS vertical-align的一些理解与认识(二)
  3. 禁止摄像机跟随`Actor`旋转 Learn Unreal Engine (with C++)
  4. python如何使用字典中的值并进行比较_python嵌套字典比较值与取值的实现示例
  5. 高斯混合模型聚类_GMM: Gaussian Mixed Model(高斯混合模型)
  6. 案例八:shell自动化管理账本脚本
  7. jzoj4640. 【GDOI2017模拟7.15】妖怪
  8. appium()-The event firing
  9. linux/unix下setuid/seteuid/setreuid/setresuid
  10. [转]HDFS用户指南(中文版)