简述Exgcd

要求关于\(x,y\)的方程\(ax+by=c\)的一组解。

假装显然我们要先求出\(ax+by=\mathrm{gcd}(a,b)\)的一组解,然后就可以找出所有的解\(x,y\)。

设\(bx'+(a\%b)y'=\mathrm{gcd}(b,a\%b)=\mathrm{gcd}(a,b)\)

\(\because a \% b = a - \left\lfloor\frac{a}{b}\right\rfloor \times b\)

\(\therefore bx' + (a \% b) y' = bx' + (a - \left\lfloor\frac{a}{b}\right\rfloor \times b) y’\)

\(\quad = bx' + ay' - \left\lfloor\frac{a}{b}\right\rfloor \times by’ = ay' + b (x' - \left\lfloor\frac{a}{b}\right\rfloor \times y')\)

故有:
\[ \mathrm{Exgcd}(a,b)=\left\{ \begin{array}{} x = 1,\; y = 1 & \mathrm{if}\;b=0\\ \mathrm{Exgcd}(b,a \% b),\; y = x - \left\lfloor\frac{a}{b}\right\rfloor\times y & \mathrm{if} \; b \not = 0 \end{array} \right. \]

代码

void exgcd(int a, int b, int &d, int &x, int &y) {if(b == 0) {d = a, x = 1, y = 0;} else {exgcd(b, a % b, d, x, y);int t = x;x = y, y = t - (a / b) * y;}
}

转载于:https://www.cnblogs.com/zhylj/p/9571264.html

扩展欧几里得学习笔记相关推荐

  1. 欧几里德 与 扩展欧几里得 学习笔记

    最近学了学扩展欧几里得,总结一下 欧几里得算法 欧几里得算法主要用来求a,b的最大公约数,又称为gcd 代码 int Gcd(int a,int b) {if(b==0) return a;else ...

  2. [数论]Gcd/ExGcd欧几里得学习笔记

    \(Q\):什么是\(GCD\)? \(GCD\) \(GCD\),即最大公约数(\(Greatest\ Common\ Divisor\)) 对于两个自然数\(a,b\),定义\(GCD(a,b)\ ...

  3. 欧几里得原理及扩展欧几里得原理(Euclidean Theory and Extended Euclidean Theory)学习笔记

    题记:这是我第四次复习扩展欧几里得原理,因为不常用到,想要使用的时候又想不起细节,总是要查资料,于是索性这次整理一下欧几里得原理及其扩展原理存档至博客以备查用. 一.欧几里得原理 欧几里得原理(Euc ...

  4. 【笔记】 欧几里得(扩展欧几里得)

    欧几里得 本质:利用辗转相减法求最大公约数,即 gcd(a, b). 数学表达: 设 a > b ,则                          gcd(a, b) = gcd(a-b, ...

  5. 【数论初步学习】扩展欧几里得定理

    本章节不以理解算法为目的,更注重于使用. 首先需要了解扩展欧几里得的算法 ---找出一对(x,y),使得其能满足ax+by=gcd(a,b)这一式子. 下面给出实现此算法的代码 void gcd(in ...

  6. 扩展欧几里得 解方程小记

    本来以前学习的时候就懵懵懂懂,长时间不用就完全不会了.. 首先对于扩展欧几里得,对于最一般的方程形式 ax+by=gcd(a,b),此方程一定有整数解,扩展欧几里便得能够求出其中的一组整数解x0,y0 ...

  7. 扩展欧几里得的应用(超详细求逆元求解方程)

    扩展欧几里得算法: 1.扩展欧几里得算法可以求逆元 2.扩展欧几里得算法可以求类似 ax+by=m, 的所有整数解,当m%gcd(a,b)==0 则ax+by=m有无线多个解,否则无解 扩展欧几里得的 ...

  8. 扩展欧几里得 POJ 1061

    感觉这道题目的数据好水啊...我的代码我都觉得姿势特别奇怪...竟然还过了... 好吧,原来不是姿势奇怪,而是逆元需要用的时候是余数也需要的时候,这里的余数是不需要的,所以就AC了 就说一下碰到的问题 ...

  9. 求逆元(线性求逆元)及其扩展欧几里得

    线性求逆元模板: int inv[maxn]; void initInverse(){inv[1] = 1;for(int i = 2; i <= maxn; i++)inv[i] = (p - ...

最新文章

  1. 基于OpenCV实战:3步实现图像降噪
  2. 如何在win7(xp)home version下安装 rose 32 bit
  3. 【Python】绘制哆啦A梦
  4. 互联网+ 何人能挡?带着你的Code飞奔吧!
  5. 【金融量化】期货中的成交量和持仓量指标
  6. Access、Trunk、Hybrid三种端口收发规则以及tagged端口和untagged端口的区别
  7. SQLPlus登录及使用
  8. 读书笔记-《麦肯锡方法》
  9. 001_KNN与线性分类器
  10. 向Docker告别的时候到了
  11. spring data jpa 出现Not a managed type
  12. c语言实验报告 订票系统,【C语言】火车订票系统
  13. 组建计算机网络通常采用3种模式,对等网的组建_计算机中的543原则_计算机网络工作模式(2)...
  14. 采用以太坊智能合约技术的报名系统源码
  15. 大数据实战项目------中国移动运营分析实时监控平台 || 项目背景
  16. 鼎智收购北斗星手机网 推全新手机品牌青葱
  17. 查找图形图斑中的空洞
  18. 【书籍分享】C++ Primer 中文第五版 PDF
  19. Excel新功能:分析数据的使用教程及案例
  20. springboot 订单重复提交_防止表单重复提交(springboot,redis)

热门文章

  1. Ring3下Inline Hook API
  2. 电路知识--认识原理图(四)
  3. 机器学习中的算法(2)-支持向量机(SVM)基础
  4. [BUUCTF-pwn]——inndy_rop
  5. STL-红黑树源码实现
  6. 引用类型String的操作
  7. 上海php黑名单,php判断ip黑名单程序代码实例
  8. DL HARQ UCI in PUCCH — R16
  9. 5G NR资源分配中RIV指示的具体原理
  10. struts2几种result type探究