即: 两个水杯A、B,容积分别为 x 和 y ,(x,y)=1。则可以通过相互倒水的方法倒出从1到(x+y)的任意自然数体积的水来。(假设睡无限)
例: x=5,y=3,倒出4升水。
- A倒满,B空: A剩5,B剩0
- A的水倒满B: A剩2,B剩3
- B倒空,A水倒至B: A剩0,B剩2
- A倒满: A剩5,B剩2
- A的水倒满B:A剩4,B剩3
数学证明:(转自:http://www.guokr.com/question/206848/)
第一种情况:水是无限量供应的。
假设现在有这样两个杯子,容积分别是x和y并且互质,那么对于任何整数a和b,下面的同余方程:(用==表示同余的符号)
z == a (mod x)
z == b (mod y)
都有解,这个结论叫做中国剩余定理,而且它的证明是个构造性证明,也就是说证明本身给出了一个解这个方程的办法。
现在假设x > y,a是需要的水的体积,令b = 0,解这个方程可以得到一个整数z。z除以y余数为0,所以只要用小杯装z/y杯水,然后向大杯中倒,大杯满了就全倒光再接着从小杯中续水,直到把z升水全部用完,大杯中剩下的就是a升水。
也就是说这类问题总是有解的,但是这个解可能不是最优的(用水最少或者折腾次数最少)。
第二种情况:水是有限的,比如大杯中一开始有x升,小杯中一开始有y升。
在这种情况下肯定需要第三个容器,如果这个容器足够大的话应该和第一种情况一样。
如果第三个容器比较小的话,那就需要更多的讨论了(比小杯还小、比小杯大比大杯小等等)。