裴蜀定理
简介
若 a , b a,b a,b 是整数,且 g c d ( a , b ) = d gcd(a,b)=d gcd(a,b)=d ,那么对于任意的整数 x x x , y y y , a x + b y ax+by ax+by 都一定是 d d d 的倍数,特别地,一定存在整数 x x x , y y y ,使 a x + b y = d ax+by=d ax+by=d 成立。
推论: a a a , b b b互质的充要条件是存在整数 x x x , y y y ,使 a x + b y = 1 ax+by=1 ax+by=1.
证明
证明一:
令
d
=
g
c
d
(
a
,
b
)
d=gcd(a, b)
d=gcd(a,b) ,易知
d
∣
a
,
d
∣
b
d|a, d|b
d∣a,d∣b .
又整除的性质,
∀
x
,
y
∈
Z
\forall x, y\in Z
∀x,y∈Z,有
d
∣
(
a
x
+
b
y
)
d|(ax+by)
d∣(ax+by).
设
s
=
m
i
n
{
a
x
+
b
y
,
a
x
+
b
y
∈
N
+
}
  
⟹
  
d
∣
s
s=min\{ax+by, ax+by\in N+\} \implies d|s
s=min{ax+by,ax+by∈N+}⟹d∣s
令
q
=
⌊
a
s
⌋
q=\lfloor\dfrac{a}{s}\rfloor
q=⌊sa⌋ ,
r
=
a
m
o
d
  
s
=
a
−
q
×
s
=
(
1
−
q
x
)
a
+
(
−
q
y
)
b
r = a\mod s = a - q\times s =(1-qx)a + (-qy)b
r=amods=a−q×s=(1−qx)a+(−qy)b ,则
r
r
r 也为关于
a
a
a 和
b
b
b 的一个线性组合.
因为
s
s
s 是最小正整数解,
0
≤
r
<
s
  
⟹
  
r
=
0
0\le r\lt s\implies r=0
0≤r<s⟹r=0,则
s
∣
a
s|a
s∣a.
同理
s
∣
b
s|b
s∣b,可得
s
∣
d
s|d
s∣d.
证明二:
(1)若
b
=
0
  
⟹
  
g
c
d
(
a
,
b
)
=
a
b=0 \implies gcd(a, b) = a
b=0⟹gcd(a,b)=a,定理显然成立
(2)若
b
b
b
 
/
=
\mathrlap{\,/}{=}
/=
0
0
0 记
d
=
g
c
d
(
a
,
b
)
d=gcd(a,b)
d=gcd(a,b) ,对
a
x
+
b
y
=
d
ax+by=d
ax+by=d 两边同时除以
d
  
⟹
  
a
1
x
+
b
1
y
=
1
d \implies a_1x + b_1y = 1
d⟹a1x+b1y=1 ,其中
g
c
d
(
a
1
,
b
1
)
=
1
gcd(a_1, b_1) = 1
gcd(a1,b1)=1 .
由欧几里得算法可知
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
1
=
b
1
x
1
+
r
1
,
a
1
%
b
1
=
r
1
,
{
r
i
∈
Z
∣
1
≤
i
}
a_1=b_1x_1+r_1, a_1\%b_1=r_1, \{r_i\in Z | 1\le i \}
a1=b1x1+r1,a1%b1=r1,{ri∈Z∣1≤i},一直递推下去~~~
无意义的次序~~~ | a | b |
---|---|---|
1 | a 1 = b 1 x 1 + r 1 a_1=b_1x_1+r_1 a1=b1x1+r1 | b 1 = r 1 x 2 + r 2 b_1=r_1x_2+r_2 b1=r1x2+r2 |
2 | b 1 = r 1 x 2 + r 2 b_1=r_1x_2+r_2 b1=r1x2+r2 | r 1 = a 1 % b 1 = r 2 x 3 + r 3 r_1=a_1\%b_1=r_2x_3+r_3 r1=a1%b1=r2x3+r3 |
3 | r 1 = r 2 x 3 + r 3 r_1=r_2x_3+r_3 r1=r2x3+r3 | r 2 = b 1 % r 1 = r 3 x 4 + r 4 r_2=b_1\%r_1=r_3x_4+r_4 r2=b1%r1=r3x4+r4 |
⋮ \vdots ⋮ | ⋮ \vdots ⋮ | ⋮ \vdots ⋮ |
n-1 | r n − 3 = r n − 2 x n − 1 + r n − 1 r_{n-3}=r_{n-2}x_{n-1}+r_{n-1} rn−3=rn−2xn−1+rn−1 | r n − 2 = r n − 4 % r n − 3 = r n − 1 x n + r n r_{n-2}=r_{n-4}\%r_{n-3}=r_{n-1}x_n+r_n rn−2=rn−4%rn−3=rn−1xn+rn |
n | r n − 2 = r n − 1 x n + r n r_{n-2}=r_{n-1}x_n+r_n rn−2=rn−1xn+rn | r n − 1 = r n − 3 % r n − 2 = r n x n + 1 + r n + 1 r_{n-1}=r_{n-3}\%r_{n-2}=r_nx_{n+1}+r_{n+1} rn−1=rn−3%rn−2=rnxn+1+rn+1 |
n+1 | r n − 1 = r n x n + 1 + r n + 1 r_{n-1}=r_nx_{n+1}+r_{n+1} rn−1=rnxn+1+rn+1 | r n = r n − 2 % r n − 1 = r n + 1 x n + 2 + r n + 2 r_n=r_{n-2}\%r_{n-1}=r_{n+1}x_{n+2}+r_{n+2} rn=rn−2%rn−1=rn+1xn+2+rn+2 |
n+2 | r n = r n + 1 x n + 2 + r n + 2 r_n=r_{n+1}x_{n+2}+r_{n+2} rn=rn+1xn+2+rn+2 | r n + 1 = … r_{n+1}=\dots rn+1=…(懒得写了) |
现在,我们设
r
n
+
1
=
0
r_{n+1}=0
rn+1=0,那么
r
n
=
1
  
⟹
  
r
n
−
2
=
r
n
−
1
x
n
+
1
  
⟹
  
r
n
−
2
−
r
n
−
1
x
n
=
1
r_n = 1\implies r_{n-2}=r_{n-1}x_{n}+1\implies r_{n-2}-r_{n-1}x_n=1
rn=1⟹rn−2=rn−1xn+1⟹rn−2−rn−1xn=1.
由上表第n-1个a的表达式得
r
n
−
1
=
r
n
−
3
−
r
n
−
2
x
n
−
2
r_{n-1}=r_{n-3}-r_{n-2}x_{n-2}
rn−1=rn−3−rn−2xn−2,将此式的
r
n
−
1
r_{n-1}
rn−1 带入上式得
r
n
−
2
−
(
r
n
−
3
−
r
n
−
2
x
n
−
2
)
x
n
=
1
r_{n-2}-(r_{n-3}-r_{n-2}x_{n-2})x_n=1
rn−2−(rn−3−rn−2xn−2)xn=1.
我们设
m
1
=
−
x
n
,
n
1
=
1
+
x
n
−
1
x
n
  
⟹
  
m
1
r
n
−
3
+
n
1
r
n
−
2
=
1
m_1=-x_n, n_1=1+x_{n-1}x_n \implies m_1r_{n-3} + n_1r_{n-2} = 1
m1=−xn,n1=1+xn−1xn⟹m1rn−3+n1rn−2=1,由于
∀
x
i
∈
Z
\forall x_i \in Z
∀xi∈Z,显然
m
1
,
n
1
∈
Z
m_1, n_1 \in Z
m1,n1∈Z. 然后我们暴力推一下:
m 0 r n − 2 + n 0 r n − 1 = 1 ( m 0 = − x n , n 0 = 1 ) m_0r_{n-2}+n_0r_{n-1} = 1(m_0=-x_n, n_0=1) m0rn−2+n0rn−1=1(m0=−xn,n0=1) |
---|
m 1 r n − 3 + n 1 r n − 2 = 1 m_1r_{n-3} + n_1r_{n-2} = 1 m1rn−3+n1rn−2=1 |
m 2 r n − 4 + n 2 r n − 3 = 1 m_2r_{n-4}+n_2r_{n-3} = 1 m2rn−4+n2rn−3=1 |
m 3 r n − 5 + n 3 r n − 4 = 1 m_3r_{n-5}+n_3r_{n-4} = 1 m3rn−5+n3rn−4=1 |
⋮ \vdots ⋮ |
m n − 2 r 1 + n n − 2 r 2 = 1 m_{n-2}r_1+n_{n-2}r_2=1 mn−2r1+nn−2r2=1 |
m n − 1 b 1 + n n − 1 r 1 = 1 m_{n-1}b_1+n_{n-1}r_1=1 mn−1b1+nn−1r1=1 |
m n a 1 + n n b 1 = 1 m_na_1+n_nb_1=1 mna1+nnb1=1 |
显然,
m
n
,
n
n
∈
Z
  
⟹
  
a
1
x
+
b
1
y
=
1
m_n,n_n \in Z\implies a_1x+b_1y=1
mn,nn∈Z⟹a1x+b1y=1有整数解
  
⟹
  
a
x
+
b
y
=
d
\implies ax+by=d
⟹ax+by=d有整数解.
推论证明
充分性:
由证明二可得.
必要性:
假设
k
=
g
c
d
(
a
,
b
)
k=gcd(a, b)
k=gcd(a,b),且
k
>
1
k \gt 1
k>1(
a
,
b
a, b
a,b不互质).
则
a
=
m
k
,
b
=
n
k
  
⟹
  
m
k
x
+
n
k
y
=
1
a = mk, b = nk\implies mkx+nky=1
a=mk,b=nk⟹mkx+nky=1
等式两边同时除以
k
k
k得
m
x
+
n
y
=
1
k
(
k
>
1
)
mx+ny=\dfrac{1}{k}(k \gt 1)
mx+ny=k1(k>1)
等式右边为小数,那么,当
a
,
b
a, b
a,b 不互质时,一定不存在整数
x
,
y
x, y
x,y ,满足
a
x
+
b
y
=
1
ax+by=1
ax+by=1.
应用
洛谷P4549(模板题)
题目描述
给定一个
n
n
n 长度的序列
(
A
1
,
…
,
A
n
)
(A_1, \dots, A_n)
(A1,…,An) ,存在一组序列
(
x
1
,
…
,
x
n
)
(x_1, \dots, x_n)
(x1,…,xn)满足
m
i
n
{
A
1
x
1
+
A
2
x
2
+
⋯
+
A
n
x
n
>
0
}
min\{A_1x_1 + A_2x_2 + \dots + A_nx_n \gt 0\}
min{A1x1+A2x2+⋯+Anxn>0}.
题解
先考虑
n
=
2
n=2
n=2,显然
A
1
x
1
+
A
2
x
2
A_1x_1+A_2x_2
A1x1+A2x2 的最小正整数解为
g
c
d
(
A
2
,
A
2
)
gcd(A_2, A_2)
gcd(A2,A2).
当
n
≥
2
n \ge 2
n≥2 时,直接
g
c
d
gcd
gcd 前两项再跟第三项
g
c
d
gcd
gcd 就可以了(为什么拓展到多项也可以,因为我也不会嘤嘤嘤),预处理一下,当
A
i
<
0
A_i \lt 0
Ai<0 时,取
a
b
s
(
A
i
)
abs(A_i)
abs(Ai),即相应的系数
x
i
x_i
xi 乘上 -1,不影响最终结果.
代码
#include <stdio.h>
#include <math.h>
int gcd(int a, int b)
{
return b ? gcd(b, a%b) : a;
}
int main(void)
{
int n, a[25], ans;
scanf("%d", &n);
for (int i = 0; i < n; i++)
{
scanf("%d", a+i);
a[i] = abs(a[i]);
}
for (int i = 0; i < n-1; i++)
{
ans = gcd(a[i], a[i+1]);
a[i+1] = ans;
}
printf("%d", ans);
return 0;
}