在 韩信分油问题的拓展分析 里,最后给出了一般性的结论,即:

用 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个容器取油问题再探的更多相关文章

  1. 【再探backbone 02】集合-Collection

    前言 昨天我们一起学习了backbone的model,我个人对backbone的熟悉程度提高了,但是也发现一个严重的问题!!! 我平时压根没有用到model这块的东西,事实上我只用到了view,所以昨 ...

  2. c++再探string之eager-copy、COW和SSO方案

    在牛客网上看到一题字符串拷贝相关的题目,深入挖掘了下才发现原来C++中string的实现还是有好几种优化方法的. 原始题目是这样的: 关于代码输出正确的结果是()(Linux g++ 环境下编译运行) ...

  3. 再探jQuery

    再探jQuery 前言:在使用jQuery的时候发现一些知识点记得并不牢固,因此希望通过总结知识点加深对jQuery的应用,也希望和各位博友共同分享. jQuery是一个JavaScript库,它极大 ...

  4. 再探快速傅里叶变换(FFT)学习笔记(其三)(循环卷积的Bluestein算法+分治FFT+FFT的优化+任意模数NTT)

    再探快速傅里叶变换(FFT)学习笔记(其三)(循环卷积的Bluestein算法+分治FFT+FFT的优化+任意模数NTT) 目录 再探快速傅里叶变换(FFT)学习笔记(其三)(循环卷积的Blueste ...

  5. LWIP再探----内存堆管理

    LWIP的内存管理主要三种:内存池Pool,内存堆,和C库方式.三种方式中C库因为是直接从系统堆中分配内存空间且易产生碎片因此,基本不会使用,其他两种是LWIP默认全部采用的方式,也是综合效率和空间的 ...

  6. ViewPager+Fragment再探:和TAB滑动条一起三者结合

    Fragment前篇: <Android Fragment初探:静态Fragment组成Activity> ViewPager前篇: <Android ViewPager初探:让页面 ...

  7. [老老实实学WCF] 第五篇 再探通信--ClientBase

    老老实实学WCF 第五篇 再探通信--ClientBase 在上一篇中,我们抛开了服务引用和元数据交换,在客户端中手动添加了元数据代码,并利用通道工厂ChannelFactory<>类创 ...

  8. Spark Streaming揭秘 Day7 再探Job Scheduler

    Spark Streaming揭秘 Day7 再探Job Scheduler 今天,我们对Job Scheduler再进一步深入一下,对一些更加细节的源码进行分析. Job Scheduler启动 在 ...

  9. 再探ASP.NET 5(转载)

    就在最近一段时间,微软又有大动作了,在IDE方面除了给我们发布了Viausl Studio 2013 社区版还发布了全新的Visual Studio 2015 Preview. Visual Stud ...

随机推荐

  1. FastDFS是使用c语言编写的开源高性能分布式文件系统

    FastDFS是什么 FastDFS是使用c语言编写的开源高性能分布式文件系统 是由淘宝开发平台部资深架构师余庆开发,FastDFS孵化平台板块 他对文件进行管理,功能包括文件存储,文件同步,文件访问 ...

  2. 类似express的路由封装方式

    1.原理 主要过程涉及三个元素的定义,如下: //用于承载一系列方法的对象 var funObj = {}; //用于根据条件执行funObj中的方法 var app = function(){}; ...

  3. 第五篇 -- git基础教程

    git(权威指南)基础教程第一章 git -- gitbash -- cygwin git service:gitolite 两个的目录不同 gitbash ~ windows/home/admini ...

  4. 最大公约数and最小公倍数(Java版)

    1.最大公约数and最小公倍数 import java.util.Scanner; public class MultipleAndDivisor { public static void main( ...

  5. 并发队列ConcurrentLinkedQueue与LinkedBlockingQueue源码分析与对比

    目录 前言 ConcurrentLinkedQueue 使用方法 存储结构 初始化 入队 出队 获取容器元素数量 LinkedBlockingQueue 使用方法 存储结构 初始化 入队 出队 获取容 ...

  6. Hadoop 3.1.1 - Yarn 服务 - 总览

    YARN 服务 总览 Yarn 服务框架为在 Yarn 原生环境里长时间运行的服务,提供了一流的支持和接口.简言之,它扮演了容器编排系统的角色,统一管理 Yarn 上运行的容器化服务.它同时支持 Do ...

  7. 本地Git项目搭建和文件操作

    Git项目搭建 git init ---在该文件夹下进入cmd/terminal git clone [url] ---克隆远程仓库到本地 Git文件操作 文件的四种状态: · Untracked:未 ...

  8. swift文件调用oc分类时崩溃解决办法(可能全网唯一)

    背景 oc为基础创建的sdk混编工程,在被sdk关联的混编demo工程中swift文件调用时,会崩溃,提示找不到sdk中oc分类方法.常规的,在demo中设置-Objc和-all_load也还是会崩. ...

  9. appium自动化测试(5)-一些pyhon操作

    1.套件的问题 将所有的测试用例加进去,会一个个执行,用于用例名字没有规范test开头的时候 def suite(): suite = unittest.TestSuite suite.addTest ...

  10. 做Android开发怎么才能不被淘汰?

    1.Jetpack架构组件从入门到精通 Android Jetpack - Navigation Android Jetpack - Data Binding Android Jetpack - Vi ...