斐蜀定理 Published on 7/29/2025 Created on 10/26/2021
裴蜀(péi shǔ)Bézout /beɪzu/ 又称贝祖定理
内容:
∀ a , b ∈ Z , ∃ x , y ∈ Z , a x + b y = gcd ( a , b ) \forall a,b\in\mathbb{Z},
\ \exists x,y\in\mathbb{Z},
\ ax+by=\gcd(a,b) ∀ a , b ∈ Z , ∃ x , y ∈ Z , a x + b y = g cd( a , b )
更一般地说:
The integers of the form a x + b y ax+by a x + b y are exactly the multiples of gcd ( a , b ) \gcd(a,b) g cd( a , b ) .
如果 a x + b y = m ax+by=m a x + b y = m 有解,那么 m m m 一定是 gcd ( a , b ) \gcd(a,b) g cd( a , b ) 的若干倍。
这可用于判断这种类型的方程(丢番图方程 )是否有解。
若关于整数 $x$ 和 $y$ 的方程 $ax+by=1$ 有解,即这里 $m=1$ ,$1$ 是$\gcd(a,b)$ 的倍数,那么显然有 $\gcd(a,b)=1$ 。即 $a$ 和 $b$ 互质。
不定方程 a x + b y = m 有整数解 ⟺ gcd ( a , b ) ∣ m \text{不定方程}\ ax+by=m\ \text{有整数解}
\iff \gcd(a,b)\mid m 不定方程 a x + b y = m 有整数解 ⟺ g cd( a , b ) ∣ m
又有:关于整数 x x x 和 y y y 的二元函数 f ( x , y ) = a x + b y f(x,y)=ax+by f ( x , y ) = a x + b y 的最小正整数取值是 gcd ( a , b ) \gcd(a,b) g cd( a , b ) ,即:
∀ a , b ∈ Z , min { m ∣ a x + b y = m ∈ N ∗ , x , y ∈ Z } = gcd ( a , b ) \forall a,b\in\mathbb{Z},
\min\{m
\mid ax+by=m\in\mathbb{N}^*,
x,y\in\mathbb{Z}
\}=\gcd(a,b) ∀ a , b ∈ Z , min { m ∣ a x + b y = m ∈ N ∗ , x , y ∈ Z } = g cd( a , b )
推广到 n n n 元函数:关于整数 x i ( i ∈ [ 1 , n ] ) x_i\ (i\in[1,n]) x i ( i ∈ [ 1 , n ]) 的 n n n 元函数 f ( x 1 , x 2 , … , x n ) = ∑ i = 1 n a i x i f(x_1,x_2,\dots,x_n)=\sum^n_{i=1}a_ix_i f ( x 1 , x 2 , … , x n ) = ∑ i = 1 n a i x i 的最小正整数取值是 gcd ( a 1 , a 2 , … , a n ) \gcd(a_1,a_2,\dots,a_n) g cd( a 1 , a 2 , … , a n ) 。
证明
[[裴蜀定理的证明]]
链接
相关题目
P4549 【模板】裴蜀定理 - 洛谷
求出序列 A A A 中所有元素的最大公约数(正值)即为答案
参考代码:
#include <cctype>
#include <cstdio>
#include <cstring>
#include <iostream>
//---//
#include <algorithm>
#include <cmath>
#include <vector>
using namespace std ;
typedef unsigned int u;
typedef long long ll;
typedef unsigned long long llu;
#define rep ( i , a , b ) for (ll i = a; i < b; i ++ )
#define REP ( i , a , b ) for (ll i = a; i <= b; i ++ )
#define per ( i , b , a ) for (ll i = b; i >= a; i -- )
ll gcd ( ll a , ll b ) { return b ? gcd (b, a % b) : a; }
signed main () {
ll n, g, k;
scanf ( " %lld%lld " , & n, & g);
while (n -- ) {
scanf ( " %lld " , & k);
g = gcd (k, g);
}
printf ( " %lld " , abs (g));
}
//https://www.luogu.com.cn/record/60899570
证明
[[裴蜀定理]]
参考:Bézout’s identity - Wikipedia
给定任意非零整数 a a a 和 b b b ,令:
S = { a x + b y ∣ a x + b y > 0 , x , y ∈ Z } S=\{ax+by\mid ax+by>0,x,y\in\mathbb{Z}\} S = { a x + b y ∣ a x + b y > 0 , x , y ∈ Z }
当 x x x 取 ± 1 \pm1 ± 1 ,且 y y y 取 0 0 0 时,a x + b y = ± a ax+by=\pm a a x + b y = ± a ,必有一值属于 S S S ,令 d = a s + b t = S min d=as+bt=S_{\min} d = a s + b t = S m i n ,我们要证明 d = gcd ( a , b ) d=\gcd(a,b) d = g cd( a , b ) ,即是要证明:
{ d ∣ a d ∣ b ∀ c 满足 c ∣ a ∧ c ∣ b , c ≥ d \begin{cases}
d\mid a\\
d\mid b\\
\forall c\ \text{满足}\ c|a\wedge c|b,\ c\geq d
\end{cases} ⎩ ⎨ ⎧ d ∣ a d ∣ b ∀ c 满足 c ∣ a ∧ c ∣ b , c ≥ d
对 a a a 和 d d d 实施带余除法 ,表示为:
a = q d + r ( q , r ∈ Z , 0 ≤ r < d ) a=qd+r\quad(q,r\in\mathbb{Z},\ 0\leq r<d) a = q d + r ( q , r ∈ Z , 0 ≤ r < d )
我们要证明 r = 0 r=0 r = 0 ,尝试表示一下 r r r
r = a − q d = a − q ( a s + b t ) = a − a q s + b q t = a ( 1 − q s ) + b q t \begin{aligned}
r&=a-qd\\
&=a-q(as+bt)\\
&=a-aqs+bqt\\
&=a(1-qs)+bqt
\end{aligned} r = a − q d = a − q ( a s + b t ) = a − a q s + b qt = a ( 1 − q s ) + b qt
可以看到,r r r 也被表示为了 a x + b y ax+by a x + b y 的形式,根据 r r r 原本的定义,我们可以知道:
r ∈ S ∪ { 0 } r\in S\cup\{0\} r ∈ S ∪ { 0 }
根据定义,d = S min d=S_{\min} d = S m i n ,但 0 ≤ r < d 0\leq r<d 0 ≤ r < d ,故 r r r 不能属于 S S S ,否则就与 d d d 是最小值矛盾了,因此,我们只能断定 r = 0 r=0 r = 0 ,也就是 d ∣ a d\mid a d ∣ a 。
我们能用同样的方法证明 d ∣ b d\mid b d ∣ b 。
要证明最后一个子命题,我们令 a = c u a=cu a = c u ,b = c v b=cv b = c v ,这就有:
d = a s + b t = c u s + c v t = c ( u s + v t ) \begin{aligned}
d&=as+bt\\
&=cus+cvt\\
&=c(us+vt)
\end{aligned} d = a s + b t = c u s + c v t = c ( u s + v t )
这就意味着:d ∣ c d\mid c d ∣ c ,因此 c ≥ d c\geq d c ≥ d 。
综上,S min = d = gcd ( a , b ) S_{\min}=d=\gcd(a,b) S m i n = d = g cd( a , b ) 。
这样,函数 a x + b y ax+by a x + b y 的所有取值均为 a s + b t as+bt a s + b t 加减几个 a a a 或 b b b 所得到的。
因为 d ∣ a d\mid a d ∣ a 且 d ∣ b d\mid b d ∣ b ,无论如何,结果总会是 d = gcd ( a , b ) d=\gcd(a,b) d = g cd( a , b ) 的整数倍,所以 a x + b y = m ax+by=m a x + b y = m 有整数解当且仅当 gcd ( a , b ) ∣ m \gcd(a,b)\mid m g cd( a , b ) ∣ m 。