裴蜀定理及其证明

裴蜀定理及其证明

更好的阅读体验

一、裴蜀定理

对于 x , y x,y x,y 的二元一次不定方程 a x + b y = c ax+by=c ax+by=c ,其有解的充要条件为 gcd ⁡ ( a , b ) ∣ c \gcd(a,b)\mid c gcd(a,b)c

1.充分性证明

充分性 若 gcd ⁡ ( a , b ) ∣ c \gcd(a,b)\mid c gcd(a,b)c ,则 a x + b y = c ax+by=c ax+by=c 有解。

证明

k k k a , b a,b a,b 线性组合的最小非负解。令 q = ⌊ a k ⌋ q=\left\lfloor\dfrac{a}{k}\right\rfloor q=ka ,则有
r = a − q k = a − q ( a x + b y ) = a ( 1 − q x ) + b ( − q y ) \begin{aligned} r&= a-qk = a-q(ax+by) \\[6pt]&=a(1-qx)+b(-qy) \end{aligned} r=aqk=aq(ax+by)=a(1qx)+b(qy)
显然 r r r 也为 a , b a,b a,b 线性组合的解,且 0 ≤ r ≤ k 0\le r \le k 0rk

由于 k k k 为最小非负解,故 r = 0 r = 0 r=0 ,那么 k ∣ a k \mid a ka 。同理可得 k ∣ b k\mid b kb

d = gcd ⁡ ( a , b ) d=\gcd(a,b) d=gcd(a,b) ,则 k ∣ d k\mid d kd d ≥ k d \ge k dk

因为 d ∣ a , d ∣ b d\mid a,d\mid b da,db s s s a , b a,b a,b 线性组合的解,所以 d ∣ k d \mid k dk

因为 s > 0 s > 0 s>0 ,所以 d = k d = k d=k ,则 a x + b y = c ax+by=c ax+by=c 的最小非负解为 gcd ⁡ ( a , b ) \gcd(a,b) gcd(a,b)

显然 ∀ c = k gcd ⁡ ( a , b ) , k ∈ Z + \forall c=k\gcd(a,b),k\in \mathbb{Z}^+ c=kgcd(a,b),kZ+ 是原方程的解。

2.必要性证明

必要性 若 a x + b y = c ax+by=c ax+by=c 有解,则 gcd ⁡ ( a , b ) ∣ c \gcd(a,b)\mid c gcd(a,b)c

证明 令 d = gcd ⁡ ( a , b ) d=\gcd(a,b) d=gcd(a,b) ,则 d ∣ a , d ∣ b d\mid a,d\mid b da,db

因为 a x + b y = c ax+by=c ax+by=c 有解,所以 d ∣ a x , d ∣ b y d\mid ax,d\mid by dax,dby ,故 d ∣ a x + b y = c d\mid ax+by=c dax+by=c

3.推广

对于不定方程 x 1 y 1 + x 2 y 2 + . . . + x n y n = k   ( y i ∈ Z ) x_1y_1+x_2y_2+...+x_ny_n=k~(y_i \in \mathbb{Z}) x1y1+x2y2+...+xnyn=k (yiZ) ,其有解的充要条件为 gcd ⁡ { x i } ∣ k \gcd\{x_i\}\mid k gcd{xi}k


二、裴蜀定理模板题

题目链接:P4549 【模板】裴蜀定理

要注意负数要转成正数再算 gcd ⁡ \gcd gcd

代码:

#include <bits/stdc++.h>
using namespace std;
#define int long long
#define R register
int n,ans,a[25];
int gcd(R int a,R int b) {return b==0?a:gcd(b,a%b);}
signed main()
{
	scanf("%lld",&n);
	for(R int i=1; i<=n; i++)
	{
		scanf("%lld",&a[i]);
		a[i]=a[i]>0?a[i]:-a[i];
		ans=gcd((i==1?a[1]:ans),a[i]);
	}
	printf("%lld\n",ans);
	return 0;
}
  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值