扩展欧几里得算法及贝祖定理的证明

本文详细介绍了欧几里得算法及其扩展版本,用于求解两个整数的最大公约数及贝祖等式的整数解。通过递归方式,扩展欧几里得算法能有效找到满足特定条件的整数解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

欧几里得算法

公式表述:gcd(a,b)=gcd(b,a%b)gcd(a,b)=gcd(b,a\%b)gcd(a,b)=gcd(b,a%b)
证明:
aaa 可以表示为 a=kb+r,r=a%ba = kb + r,r = a\%ba=kb+rr=a%b
假设 ddd(a,b)(a,b)(a,b) 的一个公约数,则有
d∣a,d∣bd|a,d|bdadb,而 r=a–kbr = a – kbr=akb,因此 d∣rd|rdr
所以 ddd 也是 (b,a%b)(b,a\%b)(b,a%b) 的公约数。

除了上面这个经典算法,还有 stein 算法用来求解最大公约数,只有整数的移位和加减法,比欧几里得算法在大整数上更有优势,可以去了解一下。

扩展欧几里得算法求解贝祖等式

贝祖定理(一般形式)

对于不全为 0 的自然数 a,ba,bab,则必然存在整数 x,yx , yxy (不唯一)满足等式ax+by=gcd(a,b)ax+by=gcd(a,b)ax+by=gcd(a,b)

上面的等式就称做贝祖等式。

扩展欧几里得算法能够求解贝祖等式的正确性证明

a>ba > ba>b

  1. b=0b = 0b=0 时,gcd(a,b)=agcd(a,b) = agcd(a,b)=a
    贝祖等式即 ax=aax = aax=a,解得 x=1,yx = 1,yx=1y 可以取 y=0y = 0y=0
  2. b>0b > 0b>0 时,
    假设 a,ba,bab 的贝祖等式的解为x1,y1x_1,y_1x1y1,即a⋅x1+b⋅y1=gcd(a,b)⋯⋯1a\cdot x_1+b\cdot y_1=gcd(a,b)\cdots\cdots1ax1+by1=gcd(a,b)1
    b,a%bb,a\%bba%b 的贝祖等式的解为x2,y2x_2,y_2x2y2,即b⋅x2+a%b⋅y2=gcd(b,a%b)⋯⋯2b\cdot x_2+a\%b\cdot y_2=gcd(b,a\%b)\cdots\cdots2bx2+a%by2=gcd(b,a%b)2
    由欧几里得算法可知gcd(a,b)=gcd(b,a%b)gcd(a,b)=gcd(b,a\%b)gcd(a,b)=gcd(b,a%b)
    a⋅x1+b⋅y1=b⋅x2+a%b⋅y2a\cdot x_1+b\cdot y_1=b\cdot x_2+a\%b\cdot y_2ax1+by1=bx2+a%by2
    a⋅x1+b⋅y1=b⋅x2+(a−⌊a/b⌋⋅b)⋅y2=a⋅y2+b⋅(x2−⌊a/b⌋⋅y2)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)ax1+by1=bx2+(aa/bb)y2=ay2+b(x2a/by2)
    由恒等关系可得{x1=y2y1=x2−⌊a/b⌋⋅y2\begin{cases} x_1=y_2 \\y_1=x_2-\lfloor a/b\rfloor\cdot y_2 \end{cases}{x1=y2y1=x2a/by2即贝祖等式 1 的解可以由 贝祖等式 2 的解得到,这是一个递归求解的过程,并且随着对 a,ba,bab 进行辗转相除,贝祖等式的系数会越来越小,直至变为情况1,而情况1贝祖等式的解是有具体的值的,即 x=1,y=0x = 1,y = 0x=1y=0。然后进行回溯计算,最终可以得到x1,y1x_1,y_1x1y1
    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,ba,bab 互质,则存在整数解 x,yx,yxy 满足 ax+by=1ax + by = 1ax+by=1

证明:
X,YX,YXY分别是使得aX+bY>0aX+bY > 0aX+bY>0的整数集合,
s=min{aX+bY}>0s = min\{aX + bY\} > 0s=min{aX+bY}>0,假设此时 X=x1,Y=y1X=x_1,Y=y_1X=x1Y=y1
则有ax1+by1=sax_1+by_1=sax1+by1=s
假设 aaa 除以 sss 的商为 kkk,余数为 r(0≤r&lt;s)r(0\le r &lt; s)r(0r<s)
则有r=a−ks=a−k(ax1+by1)=a(1−kx1)+b(−ky1)r=a-ks=a-k(ax_1+by_1)=a(1-kx_1)+b(-ky_1)r=aks=ak(ax1+by1)=a(1kx1)+b(ky1)
但是因为其中1−kx1,−ky1∈Z1-kx_1,-ky_1\in Z1kx1,ky1Z,所以必须有r=0r=0r=0
否则r&lt;sr&lt;sr<s与假设s=min{aX+bY}&gt;0s = min\{aX + bY\} &gt; 0s=min{aX+bY}>0矛盾
s∣as|asa,同理可得s∣bs|bsb
sssa,ba,bab 的公约数,又 a,ba,bab 互质
所以有s=1s = 1s=1
即存在整数x,yx,yxy使得a⋅x+b⋅y=1a\cdot x+b\cdot y=1ax+by=1成立。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值