拓展欧几里得详解(证明)

前置知识(贝祖定理)

基本内容

a 、 b a、b ab是整数,且 g c d ( a , b ) = d gcd(a,b)=d gcd(a,b)=d,对于 ∀ x , y \forall x,y x,y,都有 a x + b y = k d ax+by=kd ax+by=kd,且必 ∃ m , n \exists m,n m,n a m + b n = 1 am+bn=1 am+bn=1.

证明

a 、 b a、b ab是整数,且 g c d ( a , b ) = d gcd(a,b)=d gcd(a,b)=d,则有 a = k 1 d , b = k 2 d a=k_1d,b=k_2d a=k1d,b=k2d
即对 ∀ x , y \forall x,y x,y,都有 a x + b y = k 1 d x + k 2 d y = ( k 1 x + k 2 y ) d = k d ax+by=k_1dx+k_2dy=(k_1x+k_2y)d=kd ax+by=k1dx+k2dy=(k1x+k2y)d=kd
所以有 k 1 x + k 2 y = k k_1x+k_2y=k k1x+k2y=k,可以知道 k 1 , k 2 k_1,k_2 k1,k2互质,所以 k = 1 k=1 k=1时,必 ∃ x = m , y = n \exists x=m,y=n x=m,y=n使 a m + b n = 1 am+bn=1 am+bn=1

拓展欧几里得算法推导过程

已知 a x 1 + b y 1 = g c d ( a , b ) , b x 2 + ( a % b ) y 2 = g c d ( b , a % b ) ax_1+by_1=gcd(a,b),bx_2+(a\%b)y_2=gcd(b,a\%b) ax1+by1=gcd(a,b),bx2+(a%b)y2=gcd(b,a%b)
a x 1 + b y 1 = b x 2 + ( a % b ) y 2 ax_1+by_1=bx_2+(a\%b)y_2 ax1+by1=bx2+(a%b)y2
a % b = a − ( ⌊ a b ⌋ × b ) a\%b=a-(\lfloor \frac{a}{b} \rfloor\times b) a%b=a(ba×b)
将式子代入得:
a x 1 + b y 1 = b x 2 + ( a − ( ⌊ a b ⌋ × b ) ) y 2 ax_1+by_1=bx_2+(a-(\lfloor \frac{a}{b} \rfloor \times b))y_2 ax1+by1=bx2+(a(ba×b))y2
整理得:
a ( x 1 − y 2 ) + b ( y 1 − x 2 + ⌊ a b ⌋ y 2 ) = 0 a(x_1-y_2)+b(y_1-x_2+\lfloor \frac{a}{b} \rfloor y_2)=0 a(x1y2)+b(y1x2+bay2)=0
解出: x 1 = y 2 , y 1 = x 2 − ⌊ a b ⌋ y 2 x_1=y_2,y_1=x_2-\lfloor \frac{a}{b} \rfloor y_2 x1=y2,y1=x2bay2

因此只要得到一组特解就能递推出其他解,
我们可以知 b = = 0 , a = = g c d ( a , b ) b==0,a==gcd(a,b) b==0a==gcd(a,b)时返回 a a a此时可以得到方程的一组解 x 1 = 1 , y 1 = 0 x_1=1,y_1=0 x1=1,y1=0在回溯时不断往回带,得到所求得 a x + b y = g c d ( a , b ) ax+by=gcd(a,b) ax+by=gcd(a,b) x , y x,y x,y的值,

对于式子 a X + b Y = c aX+bY=c aX+bY=c,已经求得 x 0 , y 0 x_0,y_0 x0,y0使 a x 0 + b y 0 = c ax_0+by_0=c ax0+by0=c a x + b y = 0 ax+by=0 ax+by=0
那么 a x 0 + b y 0 + n ( a x + b y ) = c ax_0+by_0+n(ax+by)=c ax0+by0+n(ax+by)=c
整理得 a ( x 0 + n x ) + b ( y 0 + n y ) = x a(x_0+nx)+b(y_0+ny)=x a(x0+nx)+b(y0+ny)=x
x = b g c d ( a , b ) , y = a g c d ( a , b ) x=\frac{b}{gcd(a,b)},y=\frac{a}{gcd(a,b)} x=gcd(a,b)b,y=gcd(a,b)a
因此通解为 X = x + n b g c d ( a , b ) , Y = y + n a g c d ( a , b ) X=x+n\frac{b}{gcd(a,b)},Y=y+n\frac{a}{gcd(a,b)} X=x+ngcd(a,b)b,Y=y+ngcd(a,b)a

若所求为 a x + b y = c ax+by=c ax+by=c的值,我们可以先求 a x ′ + b y ′ = g c d ( a , b ) ax'+by'=gcd(a,b) ax+by=gcd(a,b)的一组特解,乘上 c g c d ( a , b ) \frac{c}{gcd(a,b)} gcd(a,b)c得到 x , y x,y x,y的值,通解为 X = x + n b g c d ( a , b ) , Y = y + n a g c d ( a , b ) ( n ∈ Z ) X=x+n\frac{b}{gcd(a,b)},Y=y+n\frac{a}{gcd(a,b)}(n\in Z) X=x+ngcd(a,b)b,Y=y+ngcd(a,b)a(nZ)

你可能感兴趣的:(学习)