定理
裴蜀定理(贝祖定理)是一个关于最大公约数的定理。
裴蜀定理说明了对任何整数a,b和它们的最大公约数d,关于未知数x和y的线性不定方程:若a,b是整数,且gcd(a,b)=dgcd(a,b)=dgcd(a,b)=d,那么对于任意的整数x,y,ax+by都一定是d的倍数,特别的,一定存在整数x,y使ax+by=d成立。
重要推论
a、b互质的充分必要条件是存在整数x,y使ax+by=1ax+by=1ax+by=1。
证明
设d=gcd(a,b)d=gcd(a,b)d=gcd(a,b),则d∣a,d∣bd\mid a,d\mid bd∣a,d∣b。由整除性质可得,∀x,y∈N\forall x,y\in \mathbb{N}∀x,y∈N,有d∣(ax+by)d\mid(ax+by)d∣(ax+by)。
设sss为ax+byax+byax+by的最小正值⋯⋯(1)\cdots\cdots(1)⋯⋯(1)。
令 a ÷ s=q⋯ra\ \div\ s=q\cdots ra ÷ s=q⋯r,则q=⌊as⌋q=\lfloor \frac{a}{s}\rfloorq=⌊sa⌋。
r=a−q⋅s=a−q⋅(ax+by)=a−a⋅qx−b⋅qyr=a-q\cdot s=a-q\cdot(ax+by)=a-a\cdot qx-b\cdot qyr=a−q⋅s=a−q⋅(ax+by)=a−a⋅qx−b⋅qy。
r=a(1−qx)+b(−qy)r=a(1-qx)+b(-qy)r=a(1−qx)+b(−qy),故r也为a,b的线性组合。⋯⋯(2)\cdots\cdots(2)⋯⋯(2)
∵r=a mod s\because r=a\ mod\ s∵r=a mod s,故0≤r<s0\leq r < s0≤r<s。⋯⋯(3)\cdots\cdots(3)⋯⋯(3)
∴(1)(2)(3)⇒r=0\therefore (1)(2)(3) \Rightarrow r=0∴(1)(2)(3)⇒r=0
∴a÷s=q\therefore a\div s=q∴a÷s=q
∴s∣a\therefore s\mid a∴s∣a
同理可证s∣bs|bs∣b
∵{s∣as∣bd=gcd(a,b) \because \left\{\begin{aligned} s|a\\ s|b\\ d=gcd(a,b) \end{aligned}\right. ∵⎩⎪⎨⎪⎧s∣as∣bd=gcd(a,b)
∴d≥s\therefore d\ge s∴d≥s
∵d∣a,d∣b\because d\mid a,d\mid b∵d∣a,d∣b,且s是a与b的一个线性组合
∴d∣s\therefore d\mid s∴d∣s
∵d∣s,s>0\because d\mid s,s > 0∵d∣s,s>0
∴d≤s\therefore d\leq s∴d≤s
∵d≥s,d≤s\because d\ge s,d\leq s∵d≥s,d≤s
∴d=s\therefore d=s∴d=s
∴ax+by=d\therefore ax+by=d∴ax+by=d
证毕。
求不定方程的解
设d=gcd(a,b)d=gcd(a,b)d=gcd(a,b)
根据裴蜀定理可得到等式(贝祖等式):ax+by=dax+by=dax+by=d
令a÷b=⌊ab⌋⋯ra\div b=\lfloor\frac{a}{b}\rfloor\cdots ra÷b=⌊ba⌋⋯r ,故r=a−⌊ab⌋⋅br=a-\lfloor\frac{a}{b}\rfloor\cdot br=a−⌊ba⌋⋅b
根据欧几里得算法,gcd(a,b)=gcd(b,a%b)=gcd(b,r)=dgcd(a,b)=gcd(b,a\%b)=gcd(b,r)=dgcd(a,b)=gcd(b,a%b)=gcd(b,r)=d
当b=0b=0b=0,可得到一组特殊解:x=1,y=0x=1,y=0x=1,y=0
当b≠0b\neq 0b=0,根据裴蜀定理:
bx′+ry′=dbx'+ry'=dbx′+ry′=d
=bx′+(a−⌊ab⌋⋅b)y′=d=bx'+(a-\lfloor\frac{a}{b}\rfloor\cdot b)y'=d=bx′+(a−⌊ba⌋⋅b)y′=d
=bx′+ay′−b⋅⌊ab⌋y′=d=bx'+ay'-b\cdot\lfloor\frac{a}{b}\rfloor y'=d=bx′+ay′−b⋅⌊ba⌋y′=d
=ay′+b(x′−⌊ab⌋y′)=d=ay'+b(x'-\lfloor\frac{a}{b}\rfloor y')=d=ay′+b(x′−⌊ba⌋y′)=d
∵\because∵
{ay′+b(x′−⌊ab⌋y′)=dax+by=d
\left\{\begin{aligned}
ay'+b(x'-\lfloor\frac{a}{b}\rfloor y')=d\\
ax+by=d
\end{aligned}\right.
⎩⎨⎧ay′+b(x′−⌊ba⌋y′)=dax+by=d
∴\therefore∴
{x=y′y=x′−⌊ab⌋y′
\left\{\begin{aligned}
x&=y' \\
y&=x'-\lfloor\frac{a}{b}\rfloor y'
\end{aligned}\right.
⎩⎨⎧xy=y′=x′−⌊ba⌋y′
即可发现x,y更新规律。
扩展欧几里得算法代码实现
int exgcd(int a,int b,int &x,int &y){
if(b==0){
x=1,y=0;
return a;
}
int d=exgcd(b,a%b,x,y);
int z=x;x=y;y=z-y*(a/b);
return d;
}