裴蜀定理(贝祖定理)

在介绍裴蜀定理前,我们先看一个比较经典的问题:

有两个容量分别为 x升 和 y升 的水壶以及无限多的水。请判断能否通过使用这两个水壶,从而可以得到恰好 z升 的水?
如果可以,最后请用以上水壶中的一或两个来盛放取得的 z升 水。
你允许:

  1. 装满任意一个水壶
  2. 清空任意一个水壶
  3. 从一个水壶向另外一个水壶倒水,直到装满或者倒空
    示例 1:
    输入: x = 3, y = 5, z = 4
    输出: True
    示例 2:
    输入: x = 2, y = 6, z = 5
    输出: False

这道题的答案在最后面
这是很经典的水壶问题,它的代码并不复杂,但要真正理解这个问题,就说到了我们今天的重点————裴蜀定理。
那么,什么是裴蜀定理?它有什么用?下面就详细为大家介绍一下。

简介

裴蜀定理(或贝祖定理)得名于法国数学家艾蒂安·裴蜀,说明了对任何整数a、b和它们的最大公约数d,关于未知数x和y的线性不定方程(称为裴蜀等式):若a,b是整数,且gcd(a,b)=d,那么对于任意的整数x,y,ax+by都一定是d的倍数,特别地,一定存在整数x,y,使ax+by=d成立。 ———引自百度百科

从这里我们不难看出,裴蜀定理是一个关于最大公约数的定理。
它描述的是:
当a,b是整数,且gcd(a,b)=d,那么对于任意的整数x,y,ax+by都一定是d的倍数。并且,一定存在整数x,y,使ax+by=d成立。
从这里不难得出,裴蜀定理的一个重要推论:
a,b互质当且仅当存在整数x,y使ax+by=1

证明

1.若b=0,则(a,b)=a.这时定理显然成立。
2.若a,b不等于0.
记d = (a, b), 对ax + by = d,两边同时除以d,可得(a1)x + (b1)y = 1,其中(a1,b1) = 1。
  转证(a1)x + (b1)y = 1。由带余除法:
  ① (a1) = (q1)(b1) + (r1), 其中0 < r1 < b1
  ② (b1) = (q2)(r1) + (r2), 其中0 < r2 < r1
  ③ (r1) = (q3)(r2) + (r3), 其中0 < r3 < r2
  …
  ④ (rn-4) = (qn-2)(rn-3) + (rn-2)
  ⑤ (rn-3) = (qn-1)(rn-2) + (rn-1)
  ⑥ (rn-2) = (qn)(rn-1) + (rn)
  ⑦ (rn-1) = (qn+1)(rn) + 1
  故,由⑦和⑥推出(rn-2)An-2 + (rn-1)Bn-1 = 1
  再结合⑤推出(rn-3)An-3 + (rn-2)Bn-2 = 1
  再结合④推出(rn-4)An-4 + (rn-3)Bn-3 = 1
  …
  再结合③推出(r1)A1 + (r2)B2 = 1
  再结合②推出(b1)A0 + (r1)B0 = 1
  再结合①推出(a1)x + (b1)y = 1
  得证。

整数中的裴蜀定理

对任意两个整数a、b,设d是它们的最大公约数。那么关于未知数x和y的线性丢番图方程(称为 裴蜀等式 ):
ax + by = m
有整数解(x,y)当且仅当m是d的倍数。裴蜀等式有解时必然有无穷多个解。

推广

n个整数间的裴蜀定理

设a1,a2,a3…an为n个整数,d是它们的最大公约数,那么存在整数x1…xn使得x1a1+x2a2+…xnan=d。
特别来说,如果a1…an互质(不是两两互质),那么存在整数x1…xn使得x1
a1+x2a2+…xnan=1。证法类似两个数的情况。

证明与上类似。

扩展欧几里得算法

扩展欧几里德算法是用来在已知a,ba,b求解一组x,yx,y,使它们满足贝祖(裴蜀)等式: ax+by=gcd(a,b)=dax+by=gcd(a,b)=d

最后附上上面 水壶问题 的代码:

public boolean canMeasureWater1(int x, int y, int z) {
    return z == 0 || (long) x + y >= z && z % gcd(x, y) == 0;
}

public int gcd(int x, int y) {//求x,y的最大公约数
    return y == 0 ? x : gcd(y, x % y);
}
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值