关于扩展欧几里得算法的一些拓展

关于扩展欧几里得的一些拓展

建议了解扩展欧几里得算法后食用……

裴蜀(贝祖)定理的证明

裴蜀定理

当且仅当 g c d a , b ∣ c gcd_{a,b}|c gcda,bc时,方程 a x + b y = c ax+by=c ax+by=c有解

证明:
  • 必要性
    g c d a , b = p gcd_{a,b}=p gcda,b=p,则 a = a ′ p , b = b ′ p a=a'p,b=b'p a=ap,b=bp,显然 g c d a ′ , b ′ = 1 gcd_{a',b'}=1 gcda,b=1
    那么 c = a x + b y = a ′ p x + b ′ p y = p ( a ′ x + b ′ y ) c=ax+by=a'px+b'py=p(a'x+b'y) c=ax+by=apx+bpy=p(ax+by)
    显然 p ∣ c p|c pc,得证!
  • 充分性
    使用数学归纳法进行证明:
    ①观察递归出口,即 b = 0 b=0 b=0,那么方程为 a x ( + 0 y ) = c ax(+0y)=c ax(+0y)=c,显然只有 a ∣ c a|c ac时方程有整数解,此时 y y y可以取任何数,且 a a a即是最开始两个数的 g c d gcd gcd
    ②考虑欧几里得算法的核心:将 ( a , b ) (a,b) (a,b)辗转为 ( b , a m o d    b ) (b,a\mod b) (b,amodb),假设系数 ( b , a m o d    b ) (b,a\mod b) (b,amodb)存在一组解 ( x 1 , y 1 ) (x_1,y_1) (x1,y1),那么 c = a x + b y = b x 1 + ( a m o d    b ) y 1 = b x 1 + ( a − ⌊ a / b ⌋ ∗ b ) y 1 = a y 1 + b ( x 1 − ⌊ a / b ⌋ ∗ y 1 ) c=ax+by=bx_1+(a\mod b)y_1=bx_1+(a-\lfloor a/b\rfloor*b)y1=ay1+b(x_1-\lfloor a/b\rfloor*y1) c=ax+by=bx1+(amodb)y1=bx1+(aa/bb)y1=ay1+b(x1a/by1)
    所以可设 ( a , b ) (a,b) (a,b)的解为: x = y 1 , y = x 1 − ⌊ a / b ⌋ ∗ y 1 x=y1,y=x_1-\lfloor a/b\rfloor*y1 x=y1,y=x1a/by1
    ③即存在解 ( x , y ) (x,y) (x,y)使得 a x + b y = c ax+by=c ax+by=c,得证!

由于必要性和充分性均满足,所以此定理得证(关于充分性和必要性不知道是什么意思的读者可以自行上网百度)

表示方程ax+by=c的一般解

我们知道方程 a x + b y = c ( g c d a , b ∣ c ) ax+by=c(gcd_{a,b}|c) ax+by=c(gcda,bc)有无穷组解,我们通过扩展欧几里得算法计算出来的是一组特解,由于题目可能会要求我们求许多不同性质的解,所以我们考虑将此方程的一般解表示出来,那么对于题目要求的不同性质的解就可以迎刃而解了

结论

设求出方程 a x + b y = c ax+by=c ax+by=c的特解为 ( x 0 , y 0 ) (x_0,y_0) (x0,y0),那么方程的一般解为:
x = x 0 + k b g c d ( a , b ) , y = y 0 − k a g c d ( a , b ) x=x_0+\dfrac{kb}{gcd(a,b)},y=y_0-\dfrac{ka}{gcd(a,b)} x=x0+gcd(a,b)kb,y=y0gcd(a,b)ka,其中 k ∈ Z k\in\mathbb{Z} kZ

证明

假设我们将所有解 ( x , y ) (x,y) (x,y) x x x为关键字从小到大排序
设特解 ( x 0 , y 0 ) (x_0,y_0) (x0,y0)的下一组解为 ( x 0 + d 1 , y 0 + d 2 ) (x_0+d_1,y0+d_2) (x0+d1,y0+d2),其中 d 1 d1 d1是符合条件的最小正整数,则满足: a ( x 0 + d 1 ) + b ( y 0 + d 2 ) = c a(x_0+d_1)+b(y_0+d_2)=c a(x0+d1)+b(y0+d2)=c
又因为 a x 0 + b y 0 = c ax_0+by_0=c ax0+by0=c,所以 a d 1 + b d 2 = 0 ad_1+bd_2=0 ad1+bd2=0,即 d 1 d 2 = − b a \dfrac{d_1}{d_2}=-\dfrac{b}{a} d2d1=ab
约分得: d 1 d 2 = − b g c d ( a , b ) / a g c d ( a , b ) \dfrac{d_1}{d_2}=-\dfrac{b}{gcd(a,b)}/\dfrac{a}{gcd(a,b)} d2d1=gcd(a,b)b/gcd(a,b)a
又由于 d 1 d1 d1是符合条件的最小正整数,所以 d 1 = b g c d ( a , b ) , d 2 = a g c d ( a , b ) d1=\dfrac{b}{gcd(a,b)},d2=\dfrac{a}{gcd(a,b)} d1=gcd(a,b)b,d2=gcd(a,b)a
又因为 a d 1 + b d 2 = 0 ad_1+bd_2=0 ad1+bd2=0,所以 k ( a d 1 + b d 2 ) = 0 k(ad_1+bd_2)=0 k(ad1+bd2)=0
所以 x = x 0 + k b g c d ( a , b ) , y = y 0 − k a g c d ( a , b ) x=x_0+\dfrac{kb}{gcd(a,b)},y=y_0-\dfrac{ka}{gcd(a,b)} x=x0+gcd(a,b)kb,y=y0gcd(a,b)ka

由ax+by=c拓展到更多项的方程

问题

对应整数数列 a 1 , a 2 , … , a n a_1,a_2,…,a_n a1,a2,,an,是否存在 x 1 , x 2 … , x n x_1,x_2…,x_n x1,x2,xn,使得 a 1 x 1 + a 2 x 2 + … + a n x n = c a_1x_1+a_2x_2+…+a_nx_n=c a1x1+a2x2++anxn=c,其中 g c d ( a 1 , a 2 , … , a n ) ∣ c gcd(a_1,a_2,…,a_n)|c gcd(a1,a2,,an)c

结论

存在

证明

使用数学归纳法进行证明:
①当 n = 2 n=2 n=2时此结论成立
②设 n = k n=k n=k时此结论成立,考虑证明 n = k + 1 n=k+1 n=k+1时也成立
考虑构造一个方程 g c d ( a 1 , a 2 , … , a k ) x + a k + 1 y = c gcd(a_1,a_2,…,a_k)x+a_{k+1}y=c gcd(a1,a2,,ak)x+ak+1y=c
由于 g c d ( a 1 , a 2 , … , a k , a k + 1 ) = g c d ( g c d ( a 1 , a 2 , … , a k ) , a k + 1 ) gcd(a_1,a_2,…,a_k,a_{k+1})=gcd(gcd(a_1,a_2,…,a_k),a_{k+1}) gcd(a1,a2,,ak,ak+1)=gcd(gcd(a1,a2,,ak),ak+1),且 g c d ( a 1 , a 2 , … , a k + 1 ) ∣ c gcd(a_1,a_2,…,a_{k+1})|c gcd(a1,a2,,ak+1)c,所以该方程有解
又因为 a 1 x 1 + a 2 x 2 + … + a n x n = g c d ( a 1 , a 2 , … , a k ) x a_1x_1+a_2x_2+…+a_nx_n=gcd(a_1,a_2,…,a_k)x a1x1+a2x2++anxn=gcd(a1,a2,,ak)x,所以可以用 a 1 x 1 + a 2 x 2 + … + a n x n a_1x_1+a_2x_2+…+a_nx_n a1x1+a2x2++anxn g c d ( a 1 , a 2 , … , a k ) gcd(a_1,a_2,…,a_k) gcd(a1,a2,,ak)替换,即可得到当 n = k + 1 n=k+1 n=k+1时的方程
③故当 n = k + 1 n=k+1 n=k+1时此结论成立,得证!
(当然以上证明过程也可以作为求解过程,维护几个前缀 g c d gcd gcd即可)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值