知识储备

1 . 朴素欧几里得原理:gcd(a,b) == gcd(b,a % b)
2 . 负数取模:忽略符号返回绝对值就好了
3 . 模数原理:对于整数a,b必然存在整数k使得a % b == a - k * b,
且此时k == a / b向下取整

定理内容

对于正整数a,b,必然存在整数(不一定是正数)x,y,
使得ax+by==gcd(x,y)ax+by==gcd(x,y)ax+by==gcd(x,y)

证明

(来自SDFZ-SPLI的援助)
把两边同时除以gcd(x,y),由朴素欧几里得定理可以得到恒等式,说明一定存在至少一组解使得$ax+by==gcd(x,y)

求解过程

a*x1+b*y1=gcd(a, b);
b*x2+gcd(a%b)*y2=gcd(b, a%b);

∵gcd(a, b)==gcd(b, a%b)
∴a*x1+b*y1==b*x2+(a%b)*y2

∵对于a和b存在整数k使得a % b == a - k * b
∴a%b可以拆成a-k*b,k==(a / b 向下取整)

∴a * x1 + b * y1 == b * x2 + ( a - k * b ) * y2 【把k==(a / b 向下取整)代入】
∴a * x1 + b * y1 == b * x2 + ( a - ( a / b ) * b ) * y2
即a * x1 + b * y1 == b * x2 + a * y2 - b * ( a / b ) * y2
所以有a * x1 + b * y1 == a * y2 + b * ( x2 - ( a / b ) * y2 )
观察上式可知 x1 = y2 , y1 = x2 - a / b * y2
可能上面五行是小学数学?不是很难吧

所以得出结论:x1,y1是由x2,y2得来的

那么x2,y2也一定是由x3,y3得来的,所以我们来递归吧
但递归需要终止条件:
记得在辗转相除法求最大公约数的时候,我们的递归终止条件是一方为0,那我们现在也可以参考一下,先递归gcd(a , b),当b==0时,此时a的值就是我们要的最大公约数,再根据扩展欧几里得定律a * x + b * y == gcd(a , b),将a = a,b = 0带入,可以求出x和y的值,此时x == 1,y == 0,在这里终止递归。

代码实现

清楚了原理以后代码应该很简单吧

int exGcd(int a,int b,int &x,int &y)
{if(b==0){x=1;y=0;return a;}int r=exGcd(b,a%b,x,y);int t=x;x=y;y=t-a/b*y;return r;
}

扩展欧几里得定理 新手向证明及代码相关推荐

  1. 欧几里得定理与扩展欧几里得定理

    欧几里的定理(辗转相除法): gcd(a,b) = gcd(b,a%b) gcd(a,b)表示a,b的最大公约数 证明: 设 a > b c = a%b a = k * b + c (k为某个整 ...

  2. 数学基础知识(扩展欧几里得定理)

    一.欧几里得定理(辗转相除法) 性质:如果 i 能整除a,也能整除b,则 i 能整除a+b,也能整除ax+by(x,y为整数),同时a mod b = a-(a/b)*b 用以上的性质我们知道如果一个 ...

  3. 扩展欧几里得定理求ax + by = c 的通解

    扩展欧几里得定理求ax + by = c 的通解: 前置条件: ax + by = c , gcd(a, b) = d 计算: a d \frac{a}{d} da​x + b d \frac{b}{ ...

  4. 专题·扩展欧几里得定理【including 求解二元一次方程,线性同余方程

    初见安~这里是基础数论专题(3)~[详见数论专栏] p.s:本文章假设你已经掌握了欧几里得算法--辗转相除法求最大公约数(gcd) 一.二元一次方程 形如的含有两个未知数且最高次数为1的方程我们称之为 ...

  5. 扩展欧几里得定理详解和运用(就不信你看不懂!)

    1 :扩展欧几里得内容: 扩展欧几里德算法是用来在已知a, b求解一组x,y使得ax+by =c.(若 c%gcd(a,b)!=0)则无解 所以 我们求ax+by=c是不是可以转化为求 ax+by=k ...

  6. 扩展欧几里得定理的证明和代码

    1.欧几里得算法,gcd(a,b)为a b(a>b)的最大公约数,则gcd(a,b) = acd(b, a%b) 利用这个定理我们可以反复对ab模下去求得a和b的最大公约数 代码如下 int G ...

  7. 浅谈扩展欧几里得定理(附裴蜀定理)

    关于扩展欧几里得定理 众所周知,扩展欧几里得定理是用来求形如(a,b,c皆为整数)这样的方程的一组解[注,仅是一组解]的定理 它的原理比较复杂,本人学了挺久才懂了一点,这里就不谈了,扩欧的核心是它的思 ...

  8. 数论基础(1)扩展欧几里得定理

    一.引言 扩欧在朴素欧几里得定理中扩展得到,主要用于解决什么问题? 1.求两个数的最大公约数(朴素欧也可以解决这个问题) 2.ax+by=gcd(a,b),求解这个线性不定方程的一组特解. (补充:贝 ...

  9. 对扩展欧几里得定理理解+证明

    原文出处: https://blog.csdn.net/Floatiy/article/details/80452643 知识储备 1 . 朴素欧几里得原理:gcd(a,b) == gcd(b,a % ...

最新文章

  1. Linux C编程--进程介绍5--system函数
  2. C++实现快速排序算法QuickSort()
  3. 中国发布自主开发的域名系统基础软件 “红枫”
  4. Baseline needs more love
  5. HDU1069 最长上升子序列
  6. 前端学习(3291):react hook 规范
  7. [html] 如何去除标签<i>默认斜体?
  8. 从厕所排队引发的产品设计方案思考
  9. quot;蓝筹quot;如何使程序猿?
  10. 诺基亚手机的安全保护。--如何使你的手机丢失,被盗后依然安全。
  11. 变的不只有外观!iPhone 14 Pro更多细节曝光:相机、快充大升级
  12. mimics能导出什么格式_Mimics到底支持怎样的图像格式(修正版)
  13. 3D打印无人机等无人设备4——solidworks逆向建模编辑stl打印文件
  14. 【阿卡乐谱】【日常分享】超级强大的简谱-《茉莉花》
  15. VOC数据集格式介绍
  16. Windows环境下配置深度强化学习环境玩Atari游戏
  17. 如何制作生成GIF?手把手教你生成GIF动态图
  18. RTX 4080、RTX4070 Ti 相当于什么水平
  19. 检索报告计算机类,计算机类的检索报告.docx
  20. 时间转换 MJDUTC

热门文章

  1. 深入理解 React 高阶组件
  2. MAC 以太网(PAUSE)流量控制原理
  3. Gamebryo—ParticalSystem
  4. 【cad2010闪退怎么解决】
  5. tensorflow环境下keras安装
  6. 被誉为“阿拉比卡的天堂”!这个中国城市跻身全球阿拉比卡咖啡黄金种植带...
  7. 腾讯去年100余人因触犯高压线被辞退;滴滴出行恢复新用户注册;Firefox 109发布|极客头条
  8. 如果你很迷恋一个人,那你一定配不上他。
  9. 二叉搜索树的后序遍历序列
  10. mysql innodb_log_group_home_dir_InnoDB参数详解