n个容器取油问题再探
在 韩信分油问题的拓展分析 里,最后给出了一般性的结论,即:
用 n (n > 1) 个不规则无刻度的容器从一个无穷大的油桶里取油,这些容器容量都为整数升,分别记为 a1, a2, ..., an ,且满足(a1, a2, ..., an) = 1。则所能取得的整数升油量为0到s范围内的全体整数,s = a1+a2+...+an。
为了证明这个一般性结论,给出了一个未能证明的引理,即:
引理 若n个正整数满足 (a1, a2, ..., an) = 1,并记 s为这n个数的和,则有 min{ (a1, s), (a2, s), ..., (an, s) } = 1。
昨天晚上和葛永超、walls老师进一步探讨了一下。永超首先找到了一个 n=4 的反例:2, 3, 4, 9。
2+3+4+9 = 18, (2, 18) = 2, (3, 18) = 3, (4, 18) = 2, (9, 18)= 9,确实是反例,因此上述“引理”被证伪。
随后,我想到把这个被证伪的“引理”的结论稍作弱化处理,得到如下调整的引理:
引理 若n (n > 1) 个正整数满足 (a1, a2, ..., an) = 1,把这 n 个数分成两组,则至少存在一种分法,使得每组数的和,分别记为 s1 和 s2,满足 (s1, s2) = 1。
这样 2, 3, 4, 9 就不是反例了,因为 (2+3, 4+9) = 1。若这个引理成立,一样可以由这个引理把容器数 n > 2 的取油问题等价为容器数 n = 2 的取油问题。
我指出若能找出三个数的反例,这个调整后的引理也就不成立;和walls老师确认这个弱化后的结论证明起来依然很困难后就休息了。
今早一起来,看到了永超提供的三个数的反例:6, 15, 49。
6+15+49 = 70,(6, 70) = 2, (15, 70) = 5, (49, 70) = 7,的确是三个数的反例,调整后的“引理”也被证伪。
琢磨了一下这个反例的构造规律,发现其中有一组基础数:2, 5, 7,满足两个较小的数之和等于较大的数(即 2+5=7),这三个基础数的最小公倍数为2·5·7=70;据此要构造反例的三个数分别记为 a, b, c,令 c = 7·7,并令 a+b+c = 2·5·7,于是 a+b = (2·5 - 7)·7 = 3·7,令 a = 2·3 及 b = 5·3,就得到了 6, 15, 49 这一组反例。
同样,选 2, 7, 9为基础数,可以得到另一组反例:10, 35, 81。事实上,只要选2作为基础数,再选两个相邻的奇数为基础数,按上述方法一般都可以构造出一组三个数的反例(唯一的例外是2, 1, 3这一组基础数)。以 2, 3, 5 为基础数,可得最小的一组三个数的反例 2,3, 25。
也可以使用2以外的偶数作基础数,比如由 3, 4, 7 得到的反例是 15, 20, 49。
再来考虑多于三个数的反例,比如在三个数的反例 15, 20, 49 基础上,添加一个数,能否构造出四个数的反例。
15 = 3*5, 20 = 2*2*5, 49 = 7*7
又由于 15+20+49 = 84 = 2*2*3*7
所以可以构造第四个数为 2*3*7 = 42
这样就得到了4个数15, 20, 42, 49。这4个数的和为126,4个数中任意一个数和126都不互素,且
由 (42+15, 126) = 3, (42+20, 126) = 2, (42+49, 126) = 7,可知 15, 20, 42, 49 这一组数构成了一组4个数的反例。
易知更多个数的反例只需补充上相应数量的42或42的任意倍数即可。至此可知,上面所谓的“引理”已经没有可以调整的余地和价值。这也说明上面的n个容器取油的一般性结论,如果成立的话,还需另辟蹊径证明。
对于n个容器取油的一般性结论,我依然不能证明或证伪。以下仅就上述几个反例的情形做一些具体的探索。
先看 n = 3 的情形,假设三个容器的容量分别为 6, 15, 49 升,由上面的分析已经知道这三个容器不能分成两组,使得各组的复合容量数互素,即无法等价成 n = 2 的情形。但由 (15, 49) = 1 可知由容量分别为 15 和 49 升的两个容器取得的整数升油数为 0 到 15+49 = 64 之间的全体整数。而 6+15+49 = 70,三个容器都装满可取得70升油,因此只需列举出65 到 69 升油也都可以用三个容量分别为6, 15, 49 升的容器取得,0 到 70 之间的全体整数升油便都能取得。
由 (15, 49) = 1,用49升和15升的容器可以倒腾出 1 升的油量,用6升的容器盛放这1升油,并把15升和49升的容器倒满油,于是就得到了 1+15+49 = 65 升油;
同样地,由 (15, 49) = 1,用49升和15升的容器可以倒腾出 2 升的油量,用6升的容器盛放倒腾出的2升油,并把15升和49升的容器倒满油,于是就得到了 2+15+49 = 66 升油;
用49升和15升的容器还可以倒腾出 3、4、5 升的油量,用同样的方法,可以依次得到67、68、69升油。
再看一个 n = 4 的情形,假设4个容器的容量分别为 15, 20, 42, 49 升,由上面的分析已经知道这4个容器不能分成两组,使得各组的复合容量数互素,即无法等价成 n = 2 的情形。但由 (20, 49) = 1 可知由容量分别为 20 和 49 升的两个容器取得的整数升油数为 0 到 20+49 = 69 之间的全体整数。而 15+20+42+49 = 126,还需要考察 70到125之间的每个整数是否能取到。
15+42 = 57,于是由 20 升 和 49 升的容器倒腾出的 1 到 56 升的油量可以倒腾到 15 升和 42 升这两个容器里存放,再把 20 升 和 49 升的容器倒满,就能依次取得 69+1=70 到 69+56=125 升油。
以上两个具体例子的考察说明,这两个所谓反例只是上面所谓“引理”的反例,而不是n个容器取油的一般性结论的反例。
n个容器取油问题再探的更多相关文章
- 【再探backbone 02】集合-Collection
前言 昨天我们一起学习了backbone的model,我个人对backbone的熟悉程度提高了,但是也发现一个严重的问题!!! 我平时压根没有用到model这块的东西,事实上我只用到了view,所以昨 ...
- c++再探string之eager-copy、COW和SSO方案
在牛客网上看到一题字符串拷贝相关的题目,深入挖掘了下才发现原来C++中string的实现还是有好几种优化方法的. 原始题目是这样的: 关于代码输出正确的结果是()(Linux g++ 环境下编译运行) ...
- 再探jQuery
再探jQuery 前言:在使用jQuery的时候发现一些知识点记得并不牢固,因此希望通过总结知识点加深对jQuery的应用,也希望和各位博友共同分享. jQuery是一个JavaScript库,它极大 ...
- 再探快速傅里叶变换(FFT)学习笔记(其三)(循环卷积的Bluestein算法+分治FFT+FFT的优化+任意模数NTT)
再探快速傅里叶变换(FFT)学习笔记(其三)(循环卷积的Bluestein算法+分治FFT+FFT的优化+任意模数NTT) 目录 再探快速傅里叶变换(FFT)学习笔记(其三)(循环卷积的Blueste ...
- LWIP再探----内存堆管理
LWIP的内存管理主要三种:内存池Pool,内存堆,和C库方式.三种方式中C库因为是直接从系统堆中分配内存空间且易产生碎片因此,基本不会使用,其他两种是LWIP默认全部采用的方式,也是综合效率和空间的 ...
- ViewPager+Fragment再探:和TAB滑动条一起三者结合
Fragment前篇: <Android Fragment初探:静态Fragment组成Activity> ViewPager前篇: <Android ViewPager初探:让页面 ...
- [老老实实学WCF] 第五篇 再探通信--ClientBase
老老实实学WCF 第五篇 再探通信--ClientBase 在上一篇中,我们抛开了服务引用和元数据交换,在客户端中手动添加了元数据代码,并利用通道工厂ChannelFactory<>类创 ...
- Spark Streaming揭秘 Day7 再探Job Scheduler
Spark Streaming揭秘 Day7 再探Job Scheduler 今天,我们对Job Scheduler再进一步深入一下,对一些更加细节的源码进行分析. Job Scheduler启动 在 ...
- 再探ASP.NET 5(转载)
就在最近一段时间,微软又有大动作了,在IDE方面除了给我们发布了Viausl Studio 2013 社区版还发布了全新的Visual Studio 2015 Preview. Visual Stud ...
随机推荐
- 扩展欧几里得(exgcd)-求解不定方程/求逆元
贝祖定理:即如果a.b是整数,那么一定存在整数x.y使得ax+by=gcd(a,b).换句话说,如果ax+by=m有解,那么m一定是gcd(a,b)的若干倍.(可以来判断一个这样的式子有没有解)有一个 ...
- C++第五十篇 -- 获取串口的描述信息
如何知道自己的电脑上有无串口呢? -- 手动 1. 查看电脑,看是否有串口器件(串口是一个九针的D型接口) 2. 在设备管理器上查看 乍一看,还以为是有两个串口,其实仔细看描述就知道,这是蓝牙虚拟串口 ...
- 线性反馈移位寄存器(LFSR)
LFSR用于产生可重复的伪随机序列PRBS,该电路有n级触发器和一些异或门组成,如下图所示. 其中,gn为反馈系数,取值只能为0或1,取为0时表明不存在该反馈之路,取为1时表明存在该反馈之路:这里的反 ...
- SaltStack 命令注入漏洞(CVE-2020-16846)
SaltStack 是基于 Python 开发的一套C/S架构配置管理工具.2020年11月SaltStack官方披露了CVE-2020-16846和CVE-2020-25592两个漏洞,其中CVE- ...
- ASPX页面传参中文乱码处理
前端 function() { var msg='这是一段中文参数'; window.location.href="New.aspx?name="+escape(msg); } 后 ...
- 洛谷P5691题解
题面 本人用的是暴力分类讨论 + \(unordered\_map\) 存储,与所有的题解都不同. 因为 \(n \leq 6\) ,非常的小,并且我不想写 DFS,所以直接暴力分类讨论 \(n=1, ...
- linux笔记2随笔
124.diff命令:文件内容对比 diff命令用于比较多个文本文件之间的差异,这在系统安全防范中非常重要.比如当黑客入侵系统之后,往往会修改一些系统配置文件,从而留下一些后门. 所以作为运维人员.最 ...
- Vulhub-Mysql 身份认证绕过漏洞(CVE-2012-2122)
前言 当连接MariaDB/MySQL时,输入的密码会与期望的正确密码比较,由于不正确的处理,会导致即便是memcmp()返回一个非零值,也会使MySQL认为两个密码是相同的.也就是说只要知道用户名, ...
- MySQL的函数使用
目录 COUNT()函数基本使用 SUM( )函数基本使用 AVG()函数基本使用 MAX()函数基本使用 MIN()函数基本使用 字符函数 concat()和concat_ws() LEFT()与R ...
- 重定向">" 及">>"符号的简单运用
1.command > file 将输出重定向(可理解写入)到 file. 2.command >> file 将输出以追加的方式重定向到 file,也就是写入到 file的尾端. ...