对于"容量分别为A与B的两个水桶,是否能够通过互相倒水可以得到1~MAX(A,B)所有容量的水"问题的分析

    此问题与数论息息相关,结论如下:对于所有最大公因数为1 的A,B,都能产生任意的1~max(A,B)之间的容量,反之则不成立。
证明:
先证明一个需要用到的数论中的定理
如果a,b为任意整数,但不全为0,那么a,b的最小公约数为满足s = ax+by (x,y 为任意整数)的最小的正整数s。
证明如下:令s = ax + by (x,y为任意整数)的最小正整数,令q=floor(a/s),那么有如下等式:
a mod s = a - qs
         = a - q(ax + by)
         = a(1 - px) + b(-qy)
可见a mod s的值也是a与b的线性组合,但a mod s < s所以a mod s只能为0, 同理b mod s也为0,所以s为a,b的公约数,所以有gcd(a,b) >= s;但是,因为s = ax + by并且有(ax + by)能被gcd(a,b)整除:
因为a,b的最大公约数为gcd(a,b),所以有
a = p*gcd(a,b);
b = q*gcd(a,b);
ax+by = x*p*gcd(a,b)+y*q*gcd(a,b)
       = (x*p+y*q)*gcd(a, b)
也就是gcd(a,b)|(ax+by)
所以有gcd(a,b) <= s所以s = gcd(a,b),此命题得证。
下面证明初始命题:
因为A,B互素(也就是最大公约数为1)所以gcd(A,B) = 1,那么根据上面的定理,有gcd(A,B) = Ax + By (x,y为任意整数),且最小,也就是说gcd(A,B)是满足整数个A,与整数个B的和的最小正整数值,这里我们很清楚的看到,整数个A,整数个B的和肯定是一个为正一个为负(对于本题来说),设A为正,B为负,那么也就是说通过把x桶A,放到y桶B中,就可以得到gcd(A,B)的容量,而这正是通过操作可以达到的最小容量,如果此容量不为1,那么1是无论如何都不可能出现的,而只要产生了1,那么自然可以产生任意的容量。所以原命题的证。
(至于具体操作的办法,不难了吧,如果想明白了,那么就做做zoj1005吧)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值