扩展欧几里得算法及贝祖定理的证明
欧几里得算法
公式表述: g c d ( a , b ) = g c d ( b , a % b ) gcd(a,b)=gcd(b,a\%b) gcd(a,b)=gcd(b,a%b)
证明:
a a a 可以表示为 a = k b + r , r = a % b a = kb + r,r = a\%b a=kb+r,r=a%b
假设 d d d 是 ( a , b ) (a,b) (a,b) 的一个公约数,则有
d ∣ a , d ∣ b d|a,d|b d∣a,d∣b,而 r = a – k b r = a – kb r=a–kb,因此 d ∣ r d|r d∣r
所以 d d d 也是 ( b , a % b ) (b,a\%b) (b,a%b) 的公约数。
除了上面这个经典算法,还有 stein 算法用来求解最大公约数,只有整数的移位和加减法,比欧几里得算法在大整数上更有优势,可以去了解一下。
扩展欧几里得算法求解贝祖等式
贝祖定理(一般形式)
对于不全为 0 的自然数 a , b a,b a,b,则必然存在整数 x , y x , y x,y (不唯一)满足等式 a x + b y = g c d ( a , b ) ax+by=gcd(a,b) ax+by=gcd(a,b)
上面的等式就称做贝祖等式。
扩展欧几里得算法能够求解贝祖等式的正确性证明
设 a > b a > b a>b
- 当 b = 0 b = 0 b=0 时, g c d ( a , b ) = a gcd(a,b) = a gcd(a,b)=a
贝祖等式即 a x = a ax = a ax=a,解得 x = 1 , y x = 1,y x=1,y 可以取 y = 0 y = 0 y=0 - 当 b > 0 b > 0 b>0 时,
假设 a , b a,b a,b 的贝祖等式的解为 x 1 , y 1 x_1,y_1 x1,y1,即 a ⋅ x 1 + b ⋅ y 1 = g c d ( a , b ) ⋯ ⋯ 1 a\cdot x_1+b\cdot y_1=gcd(a,b)\cdots\cdots1 a⋅x1+b⋅y1=gcd(a,b)⋯⋯1
b , a % b b,a\%b b,a%b 的贝祖等式的解为 x 2 , y 2 x_2,y_2 x2,y2,即 b ⋅ x 2 + a % b ⋅ y 2 = g c d ( b , a % b ) ⋯ ⋯ 2 b\cdot x_2+a\%b\cdot y_2=gcd(b,a\%b)\cdots\cdots2 b⋅x2+a%b⋅y2=gcd(b,a%b)⋯⋯2
由欧几里得算法可知 g c d ( a , b ) = g c d ( b , a % b ) gcd(a,b)=gcd(b,a\%b) gcd(a,b)=gcd(b,a%b)
故 a ⋅ x 1 + b ⋅ y 1 = b ⋅ x 2 + a % b ⋅ y 2 a\cdot x_1+b\cdot y_1=b\cdot x_2+a\%b\cdot y_2 a⋅x1+b⋅y1=b⋅x2+a%b⋅y2
即 a ⋅ x 1 + b ⋅ y 1 = b ⋅ x 2 + ( a − ⌊ a / b ⌋ ⋅ b ) ⋅ y 2 = a ⋅ y 2 + b ⋅ ( x 2 − ⌊ a / b ⌋ ⋅ y 2 ) a\cdot x_1+b\cdot y_1=b\cdot x_2+(a-\lfloor a/b\rfloor\cdot b)\cdot y_2=a\cdot y_2+b\cdot(x_2-\lfloor a/b\rfloor \cdot y_2) a⋅x1+b⋅y1=b⋅x2+(a−⌊a/b⌋⋅b)⋅y2=a⋅y2+b⋅(x2−⌊a/b⌋⋅y2)
由恒等关系可得 { x 1 = y 2 y 1 = x 2 − ⌊ a / b ⌋ ⋅ y 2 \begin{cases} x_1=y_2 \\y_1=x_2-\lfloor a/b\rfloor\cdot y_2 \end{cases} {x1=y2y1=x2−⌊a/b⌋⋅y2即贝祖等式 1 的解可以由 贝祖等式 2 的解得到,这是一个递归求解的过程,并且随着对 a , b a,b a,b 进行辗转相除,贝祖等式的系数会越来越小,直至变为情况1,而情况1贝祖等式的解是有具体的值的,即 x = 1 , y = 0 x = 1,y = 0 x=1,y=0。然后进行回溯计算,最终可以得到 x 1 , y 1 x_1,y_1 x1,y1。
C++代码如下:
\\exGcd函数返回a,b最大公约数。贝祖等式的整数解为引用参数x,y
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;
}
贝祖定理(更原始形式)的证明
若整数 a , b a,b a,b 互质,则存在整数解 x , y x,y x,y 满足 a x + b y = 1 ax + by = 1 ax+by=1
证明:
设 X , Y X,Y X,Y分别是使得 a X + b Y > 0 aX+bY > 0 aX+bY>0的整数集合,
令 s = m i n { a X + b Y } > 0 s = min\{aX + bY\} > 0 s=min{aX+bY}>0,假设此时 X = x 1 , Y = y 1 X=x_1,Y=y_1 X=x1,Y=y1
则有 a x 1 + b y 1 = s ax_1+by_1=s ax1+by1=s
假设 a a a 除以 s s s 的商为 k k k,余数为 r ( 0 ≤ r < s ) r(0\le r < s) r(0≤r<s)
则有 r = a − k s = a − k ( a x 1 + b y 1 ) = a ( 1 − k x 1 ) + b ( − k y 1 ) r=a-ks=a-k(ax_1+by_1)=a(1-kx_1)+b(-ky_1) r=a−ks=a−k(ax1+by1)=a(1−kx1)+b(−ky1)
但是因为其中 1 − k x 1 , − k y 1 ∈ Z 1-kx_1,-ky_1\in Z 1−kx1,−ky1∈Z,所以必须有 r = 0 r=0 r=0
否则 r < s r<s r<s与假设 s = m i n { a X + b Y } > 0 s = min\{aX + bY\} > 0 s=min{aX+bY}>0矛盾
故 s ∣ a s|a s∣a,同理可得 s ∣ b s|b s∣b
即 s s s 为 a , b a,b a,b 的公约数,又 a , b a,b a,b 互质
所以有 s = 1 s = 1 s=1
即存在整数 x , y x,y x,y使得 a ⋅ x + b ⋅ y = 1 a\cdot x+b\cdot y=1 a⋅x+b⋅y=1成立。
扩展欧几里得算法及贝祖定理的证明相关推荐
- 扩展欧几里得算法与中国剩余定理
在<孙子算经>中有这样一个问题:有物不知其数,三三数之剩二,五五数之剩三,七七数之剩二.问物几何? 这个问题说的是,有一件物品,我们不知道它的数量.但是,如果三个三个数,最后会剩下两个:如 ...
- 裴蜀(贝祖)定理及其证明
定理 $\large{ax+by=c,x\in Z^*,y\in Z^*}$成立的充要条件是$\large{\gcd(a,b)|c}$ 证明 设$\large {s=\gcd(a,b)}$,显然$\l ...
- 裴蜀定理(贝祖定理) 证明与应用
定理:对于给定的正整数a,b,方程有解的充要条件为c是gcd(a,b)的整数倍 证明: 充分性证明: 设gcd(a,b)=d,于是设,其中k1,k2互质 那么原等式等价于,即,其中k1,k2互质 那么 ...
- 5. 扩展欧几里得算法
扩展欧几里得算法 1. 裴蜀定理 2. 扩展欧几里得算法求系数 3. 线性同余方程 1. 裴蜀定理 对任意一对正整数a,b,一定存在x,y,使得 ax + by = (a, b) (a和b的最大公约数 ...
- 有关贝祖定理的一个小问题
有关贝祖定理的一个小问题 所谓贝祖定理是说: 两个整数 a.b 是互质的.等价于方程 ax+by=1有整数解. 当然. 贝祖定理另一种更一般的形式,说的是两个整数 a.b有最大公因数是c,等价于方程 ...
- 贝祖定理及其逆定理的几种证明
文章目录 前言 贝祖定理 贝祖定理的证明 1.整除方法 2.辗转相减法 3.归纳法 贝祖定理逆定理的证明 内容 证明 总结 前言 第一次写CSDN的博客,因为我是学数学的,也学一些代码但是不多,所以文 ...
- 扩展欧几里得算法、乘法逆元与中国剩余定理
文章目录 前言 定义.定理和部分证明 整除 定义 定理 定理的证明 同余 定义 同余的性质 同余的运算律 运算律的证明 扩展欧几里得算法 代码模板 算法详解 乘法逆元 求解逆元 乘法逆元的作用 中国剩 ...
- 欧几里得算法和扩展欧几里得算法(Euclidean_Algorithm and Extended_Euclidean_Algorithm)
一.基本概念 欧几里得算法:又名辗转相除法,计算两个整数a,b的最大公约数. 扩展欧几里得算法:对于不完全为 0 的非负整数 a,b,gcd(a,b)表示 a,b 的最大公约数,必然存在整数对 x,y ...
- 欧几里得扩展欧几里得算法
#朴素的欧几里得算法大家应该知道 g c d ( a , b ) gcd(a,b) gcd(a,b)表示a,b的最大公约数 朴素的欧几里得算法其实就是所谓的辗转相除法 辗转相除法 g c d ( a ...
最新文章
- [翻译] DSL和模型驱动开发的最佳实践(3/4)
- bugku ——加密 做题记录
- android OKHttp的基本使用详解
- 北京理工大学珠海学院专业计算机类,北京理工大学珠海学院计算机学院网络工程专业...
- 直播报名 | 从业务场景入手,吃透音视频技术
- kinect1+depthimage_to_laserscan
- vcftools报错:Writing PLINK PED and MAP files ... Error: Could not open temporary file.解决方案
- OCR基于深度学习下的CNN字符识别
- 机器学习-决策树(XGBoost、LightGBM)
- html调用ckplayer说明,CKplayer功能配置(示例代码)
- 一个敷衍的开头。。。
- Portraiture4.0最新免费磨皮美白滤镜修图插件
- Android本地文件存储,机身和外置sd卡
- 一文读懂,WMS仓库管理系统模块功能
- R studio caret package 安装
- Sql Server REPLACE函数的使用;SQL中 patindex函数的用法
- 1.3.9 python中进程与线程
- GPS从入门到放弃(十五)、DCB差分码偏差
- 烟草行业IT规划现状、实施及工作重点分析
- 阿里云话费api调用实例教程
热门文章
- 分布式技术原理与实战45讲--06 加餐1:如何准备一线互联网公司面试?
- Windows10 安装软件时提示“ the error code is 2503/2502”错误解决办法
- KVM切换器工作原理
- 网络安全职业规划(笔记)
- 《软技能-代码之外的生存指南》学习笔记之理财篇
- 计算机服务器排名,2019服务器CPU天梯图 多路CPU性能排名
- CMA认证与CNAS认可的八大区别,你知道几个?
- yii ajax验证失败返回提示,Yii使用ajax验证显示错误messagebox的解决方法
- 【如何使用idea合并当前分支的代码到主分支】
- 编码原理详解(五)---熵编码(CAVAL)