关于扩展欧几里得的一些拓展
建议了解扩展欧几里得算法后食用……
裴蜀(贝祖)定理的证明
裴蜀定理
当且仅当 g c d a , b ∣ c gcd_{a,b}|c gcda,b∣c时,方程 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=a′p,b=b′p,显然 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=a′px+b′py=p(a′x+b′y)
显然 p ∣ c p|c p∣c,得证! - 充分性
使用数学归纳法进行证明:
①观察递归出口,即 b = 0 b=0 b=0,那么方程为 a x ( + 0 y ) = c ax(+0y)=c ax(+0y)=c,显然只有 a ∣ c a|c a∣c时方程有整数解,此时 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+(a−⌊a/b⌋∗b)y1=ay1+b(x1−⌊a/b⌋∗y1)
所以可设 ( 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=x1−⌊a/b⌋∗y1
③即存在解 ( 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,b∣c)有无穷组解,我们通过扩展欧几里得算法计算出来的是一组特解,由于题目可能会要求我们求许多不同性质的解,所以我们考虑将此方程的一般解表示出来,那么对于题目要求的不同性质的解就可以迎刃而解了
结论
设求出方程
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=y0−gcd(a,b)ka,其中
k
∈
Z
k\in\mathbb{Z}
k∈Z
证明
假设我们将所有解
(
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=y0−gcd(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即可)