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

欧几里得算法

公式表述: 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+rr=a%b
假设 d d d ( a , b ) (a,b) (a,b) 的一个公约数,则有
d ∣ a , d ∣ b d|a,d|b dadb,而 r = a – k b r = a – kb r=akb,因此 d ∣ r d|r dr
所以 d d d 也是 ( b , a % b ) (b,a\%b) (b,a%b) 的公约数。

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

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

贝祖定理(一般形式)

对于不全为 0 的自然数 a , b a,b ab,则必然存在整数 x , y x , y xy (不唯一)满足等式 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

  1. 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=1y 可以取 y = 0 y = 0 y=0
  2. b > 0 b > 0 b>0 时,
    假设 a , b a,b ab 的贝祖等式的解为 x 1 , y 1 x_1,y_1 x1y1,即 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 ax1+by1=gcd(a,b)1
    b , a % b b,a\%b ba%b 的贝祖等式的解为 x 2 , y 2 x_2,y_2 x2y2,即 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 bx2+a%by2=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 ax1+by1=bx2+a%by2
    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) ax1+by1=bx2+(aa/bb)y2=ay2+b(x2a/by2)
    由恒等关系可得 { 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=x2a/by2即贝祖等式 1 的解可以由 贝祖等式 2 的解得到,这是一个递归求解的过程,并且随着对 a , b a,b ab 进行辗转相除,贝祖等式的系数会越来越小,直至变为情况1,而情况1贝祖等式的解是有具体的值的,即 x = 1 , y = 0 x = 1,y = 0 x=1y=0。然后进行回溯计算,最终可以得到 x 1 , y 1 x_1,y_1 x1y1
    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 ab 互质,则存在整数解 x , y x,y xy 满足 a x + b y = 1 ax + by = 1 ax+by=1

证明:
X , Y X,Y XY分别是使得 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=x1Y=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(0r<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=aks=ak(ax1+by1)=a(1kx1)+b(ky1)
但是因为其中 1 − k x 1 , − k y 1 ∈ Z 1-kx_1,-ky_1\in Z 1kx1,ky1Z,所以必须有 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 sa,同理可得 s ∣ b s|b sb
s s s a , b a,b ab 的公约数,又 a , b a,b ab 互质
所以有 s = 1 s = 1 s=1
即存在整数 x , y x,y xy使得 a ⋅ x + b ⋅ y = 1 a\cdot x+b\cdot y=1 ax+by=1成立。

你可能感兴趣的:(算法,数学)