五猴分桃通解公式-敬献给诺贝尔奖获得者李政道博士

摘要:“五猴分桃问题”是一个中、外非常有名的趣味数学难题。研究这种类型题的简易计算方法曾困扰住了一些大物理学家和数学家。李政道博士在中国科技大学讲学时也特意提到此题,

本文通过对该问题的分析,推导出了能求解所有这种类型题的最简易通解公式 y=a(a/m)n-1-db/c,以及它的姊妹公式: y=[ka(a/m)n-1-db]/c,以及这两个公式有解和无解的条件,使这个问题得到了较园满的解决。

Summary: "Five monkey peach assignment problem", formerly known as "Sailor of the coconut," It is a well-known Chinese and foreign fun math puzzle. Studies find its simple calculation method has plagued a number of physicists and mathematicians. Dr. Li Zhengdao lectures at the Chinese, but also specifically mentioned the problem.
The author, through the analysis of the problem, got to solve this kind of problem solving systems and formulas to make this mathematical problem has been half a century, to get a better solutio

序:“五猴分桃问题”的前身是国外著名的“水手分椰子问题”,剧说,最早是由伟大物理学家狄拉克于1926年提出来的, 随后, 在经过美国数学科普大师马丁* 加德纳的介绍、推广后,该题得到了更为广泛的流传。1979年,“诺贝尔奖”获得者李政道博士, 在“中国科技大学少班”讲学时,特意提到此题。此后, 研究该题的简易计算方法,迅速风靡国内

曾对“水手分椰子”的广泛流传起过重要作用的, 著名现代数理逻辑学家怀德海,对此题给出过一个答案为(-4)巧妙的特解。在后来者的不断努力下,一些比较简便的方法也逐步出现。但严格的来说:目前所取得的成果,基本上还是局限于“五猴分桃”这一个具体题目上,离全面而又简捷地求解所有这种类型的题目,还存在着较大的距离。

1979年,本人有幸在月刊《中国青年》看到了“五猴分桃”一题,并用不定方程求得其解。随后演算推导出能解决这种类题型目的核心解题公式:y=an-db/c 。但直到前段时期才惊呀发现: 寻找“五猴分桃”类型题的简易计算方法,竟是一个有着较深背景的,国内、外已研讨了数十年的热门话题,而且至今仍未找到较好解决办法。于是本人通过继续对该问题的分析研究,进一步完善了该简易通解公式的求解体系,现发表与大家共同分享:

一.五猴分桃类型题简易通解公式

通解公式 (1), y=a(a/m)n-1-db/c,(用于b/c为正整数时)

通解公式 (2), y=[ka(a/m)n-1-db]/c,(用于b/c不为正整数时)

其中:

y ── 被分的桃子的总个数

n ── 总共分的次数

a ── 每次分的份数,

b ── 每次分a份后的余数.

c ── 每次分a份后拿走的份数,

d ── 每次分a份后拿走c份后,剩下再分的份数.

m —— (a/d)是包括m=1在内的最大公约数

k ——公式(2)中能使y值为整数的参数

注:

(a)在上试公式中,按照这种类型题题意的要求;y、a、b、c、d、n、m、都为正整数(反之无意义)

(b)对于公式(1),若b/c为正整数,则通解公必定会有解。若b/c不是一个正整数,则用通解公式(2)求解,
(c)对于公式(2),若b/m为正整数,则通解公必定会有解。若b/m不是一个正整数,则通解公式(2)无解。,
(d)通解公式(2)中的k,可通过求k公式:  k=(fc+b)(m/d)n-1而得到, (试中k大于等于0, f 是能使k取整的自然数, 在一般情况下, k会小于=c),然后再将k值代进公式2,便可很容易的直接得到解。

在上面通解公式里,如果我们取m为1,取db/c为整数,那么它表现出来的形式就是原本的核心公式:y=an-db/c

二,通解公式的推导及论证

1,推导公式例题“九猴分桃”

由于“五猴分桃”在本人推导出的“通解公式”里,已成了一个很简单的计算题目,不足以说明公式对这种类型题目的,全方位的通解能力;故加大该题目难度和复杂性,改成“九猴分桃”,其题如下:

话说某天有9只猴子忙了一整天,采摘了一堆很大的桃子后,都因太疲劳而睡着了。晚上某只猴子先悄悄的起床, 将桃子分成9份,结果发现多了8个桃子于是它吃掉这8个桃子,并贪心的拿走了9份中的2份,然后把剩下的桃子混在一起放回原处后,悄悄的回去睡觉了。

过了一会儿,另一只猴子也悄悄的起床,将剩下的桃子也分成9份, 结果也刚好多余8个桃子;它也吃掉了这8个桃子,然后也藏了9份中的2份,把剩下的桃子混在一起,也悄悄滴回去睡觉了。

又过了一会儿 ......

又过了一会儿 ......

当第7只猴子也像前面的6只猴只一样,把桃子也分成了9份, 得意的吃着多余的8个桃子时,这时突然有几只老虎吼叫而来,吓得9只猴子连蹦带窜,落荒而逃。现在,请问各位,这堆桃子最少共有多少个,

2,通解公式推导及论证
推导方法一

设: 被分的桃子数总共为y个,每次分的总份数为a, 余数为 b.每次分a份后拿走的为c份,剩下再分的份数为b 总共分的次数为n次,最后一个人分a份时的每份为x(x为正整数)

那么, 最后一个分到桃子的猴子,看到的桃子数是 :ax+b

上一个猴子看到的桃子数则为 :(xa+b)a/d+b=a2x/d+ba/d+b。

再上一个猴子看到的桃子数为 :

(a2x/d+ab/d+b)a/d+b=a3x/d2+b(a/d)2+b(a/d)+b。

同样:再上一个猴子看到的桃子数为:a4x/d3+b(a/d)3+b(a/d)2+b(a/d)+b。

也同样有,最初一个猴子看到的桃子数为:

a7x/d6+[(a/d)6+(a/d)5+(a/d)4+(a/d)3+(a/d)2+(a/d)+1]b。

根据等比数例递推公式并加以整理有:

y={anx+{an-1[1-(d/a)n]/(1-d/a)}b}/dn-1

={anx+{an-1[1-(d/a)n]}ba/c}/dn-1

=[anx+(an-1-an-1dn/an)ad/c]/dn-1

=[anx+(an-dn)b/c]/dn-1

=(anx+anb/c-dnb/c)/dn-1

=(anx+anb/c)/dn-1-db/c

从而得到求解的基本方程.y=an(x+b/c)/dn-1-db/c,并由此可得到,一个及简易公式和二个通解公式,现分别说明如下:

(1)当上式中的a(a/d)n-1部分, 若(a/d)无公约数时,则an与dn-1互质, 故上式可进一步写成:y=an[(x+b/c)/dn-1]-db/c

从上式可看出:根据题意dn-1必然是正整数,当(b/c)也为正整数,则(x+b/c)/dn-1 必可取得最小自然数1, 或1 的任意整倍数,即y=kan-db/c故(b/c)为正整数时公式必定有解,通常在计算时为了简便,k一般取最小自然数1, 则上述方程可简写成,简易公式:y=an-db/c,这个公式可看作是这种类型题目其中的一个通解,但不一定是最小解。

(2)若出现(a/d)有公约数这种情况时,此时y值,还会有比公式,y=an-db/c更小的解,

现在我们接着 y=an(x+b/c)/dn-1-db/c,这一步继续求证,设m为(a/b)的最大公约数,则有:

y=a[(a/m)/(d/m)]n-1(x+b/c)-db/c

=a(a/m)n-1(x+b/c)/(d/m)n-1-db/c。

根据上面第一种情况后面的同样道理,可得到:y=a(a/m)n-1-db/c

显然,如果我们把 1也看做是(a/d)的公约数,那么当(a/d)的公约数只有 1时,则y=a(a/m)n-1-db/c=an-db/c。

也就是说:后者实质上是前者特殊形式,而y=a(a/m)n-1-db/c,则是当b/c为整数时,求解所有的此种类型题的最小解的通解公式。它的解集为:y=ka(a/m)n-1-db/c

(3),若b/c不为正整数,则可用通解公式;y=[ka(a/m)n-1-db]/c.来求解,其公式推导如下:

方法一,对于基础方程: y=ka(a/m)n-1(x+b/c)/(d/m)n-1-db/c。,可将其中的 "a(a/m)n-1(x+b/c)/(d/m)n-1" 部分的分子和分母,同时剩以c,得到y=ka(a/m)n-1(x+b/c)c/c(d/m)n-1-db/c,记为h,并使得(x+b/c)c=k(d/m)n-1 (k为正整数)这样式h,便变成了y=ka(a/m)n-1/c-db/c,并进一步得到;y=[ka(a/m)n-1-db]/c.(即通解公式2)

方法二, 根据公式推导二基本方程的上一行的:y=can(x+b/c)/cdn-1-db/c,有,如果我们使(也必然有)c(x+b/c)=kdn-1 (k为某个能使c(x+b/c)/dn-1为正整数的正整数),则同样可得到y=[kan-db]/c,如a与d有公约数时,也可进一步写成通解公式二:y=[ka(a/m)n-1-db]/c.

(4)关于公式2,求k公式的推导; 设x=[k(d/m)n-1-b]/c, 则有cx+b=k(d/m)n-1所以有k=cx+b/(d/m)n-1,最后得到:k=(fc+b)(m/d)n-1 (k为正整数,f为能使k取整数的自然数)

有了这个已得到通解公式,a(a/m)n-1-db/c 以及对推导过程关健点的分析,我们便能很容易的得到; 通解公式推导方法二和推导方法三。

推导方法二

设: 第一次分配时,拿走数量为:(y-b)c/a;

剩下再分配的数量则为:(y-b)d/a。

第二次分配时拿走数量为;{[(y-b)c/a]-b}c/a;

则剩下再分配的数量为:[(y-b)d/a-b]d/a=(y-b)(d/a2)-bd/a。

同样有: 第三次,剩下再分配的数量为:(y-b)(d/a/)3-b(d/a)2-bd/a,

第四次,剩下再分配的数量为:(y-b)(d/a/)4-b(d/a)3- b(d/a)2-bd/a,

然后依次往后推 …… 最后可得到:第七次剩下再分配每份的数量为:

x=[(y-b)(d/a)6-b(d/a)5-b(d/a)4-b(d/a)3- b(d/a)2-b(d/a)-b]/a

yd6/a7-x=[(d/a)6+(d/a)5+(d/a)4+(d/a)3+(d/a)2+(d/a)+1]b/a

根据数列递推公式并整理后有:

x=ydn-1/an-{1[1-(d/a)n]/(1-d/a)}b/a

x=ydn-1/an-[1-(d/a)n]b/c

x=ydn-1/an-b/c-bdn/can

x=dn-1/an(y-bd/c)-d/c

同样得到基本方程:y=an(x+b/c)/dn-1-db/c,

这个推导(二)虽然比推导(一)要简单,但最后两步有具很大的跳跃性,且又不符合推导这类题型的正常思维,故很难想到。只是由于我们已经看到,目前的公式形态已非常接近目标公式y=a(a/m)n-1-db/c态,是我们才会想到可以这样去推导。

后面的公式演算,与推导方法一相同,即接着y=a(a/m)n-1(x+b/c)/(d/m)n-1-db/c。这部分继续推算,最后也可得到简易通解公式:y=a(a/m)n-1-db/cy=[ka(a/m)n-1-db]/c。

推导方法三

设:第7次分桃子的猴子看到的桃子数为:ax+b ,(x为,最后一次分a份时每份的个数) 。

第6次分桃子的猴子看到的桃子数为:(ax+b)a/d+b=a2x/d+ba/d+b。

同样有,第5次分桃子的猴子看到的桃子数为:

(a2x/d+ab/d+b)a/d+b=a3x/d2+b(a/d)2+ba/d+b。

然后,再一路往后推,可得第一次分桃子的猴子看到的桃子数为:

y=a7x/d6+[(a/d)6+(a/d)5+(a/d)4+(a/d)3+(a/d)2+(a/d)+1]b,

中括号内是一个公比为(a/d)的等比数例,根据等比数例递推公式有:

y=anx/dn-1+{(a/d)n-1[1-(d/a)n/(1-d/a)]}/b

=anx/dn-1+[(a/d)n-1-d/a]ab/c

=anx/dn-1+ban/cdn-1-db/c

=(x+b/c)an/dn-1-db/c

y=an(x+b/c)/dn-1-db/c

这里跟据推导方法一,也同样可得到通解公式一:y=a(a/m)n-1-db/c和通解公式二,y=[a(a/m)n-1-db]/c

三,后记

本文在解决“五猴分桃问题”简易计算方法这个问题上,跳出了单个、局部考虑问题的思路, 从这个问题的分的规律来寻找整体解决方案,得到了简易通解公式(1):y=a(a/m)n-1-db/c。和它的姊妹公式(2):y=[ka(a/m)n-1-db]/c。在通解公式里,

1,由于a和n可为任意数,且其它影响计算结果的因素又都可以是变量; 因此 这个公式穷极了,求解这类问题的深度和广度。

2、各个变量基本上都没有相关的系数计算,且基本上都是单独出现,另外公式有解无解的条件也简单明了, 因此这个通解公式应又是求解这种类型题的最简计算公式。

3通解公式所得到的解,又是符合这类题目的求最小解的要求, 因此可以说,这个提出来已半个多世纪的数学问题 ,已经得到较园满的解决

 

原文地址:http://blog.sina.com.cn/s/blog_a1494e130101eljh.html

时间: 2024-11-08 19:16:43

五猴分桃通解公式-敬献给诺贝尔奖获得者李政道博士的相关文章

逻辑思维题之分桃问题

#废话#经常在网上发现一些比较有趣的逻辑思维题,仔细想一下解出来会发现很有趣的,网上没有答案,自己解出来记录一下. 海盗分桃问题: 话说某天一艘海盗船被天下砸下来的一头牛给击中了,5个倒霉的家伙只好逃难到一  个孤岛,发现岛上孤零零的,幸好有有棵椰子树,还有一只猴子!  大家把椰子全部采摘下来放在一起,但是天已经很晚了,所以就睡觉先.  晚上某个家伙悄悄的起床,悄悄的将椰子分成5份,结果发现多一个椰子,顺手就给了幸运的  猴子,然后又悄悄的藏了一份,然后把剩下的椰子混在一起放回原处,最后还是悄悄

猴子分桃

猴子分桃的故事大体有两种描述: 描述 1 :五只猴子分桃.半夜,第一只猴子先起来,它把桃分成了个数相等的五堆,多出一只:于是,它吃掉了一个,拿走了一堆.第二只猴子起来一看,只有四堆桃,于是把四堆合在一起,分成相等的五堆,又多出一个:然后,它也吃掉了一个,拿走了一堆.剩下的三只猴子也都是这样分的.问:这堆桃至少有多少个? 描述 2 :海滩上有一堆桃子,五只猴子来分.第一只猴子把这堆桃子平均分为五份,多了一个,这只猴子把多的一个扔入海中,拿走了一份.第二只猴子把剩下的桃子又平均分成五份,又多了一个,

猴子分桃问题的解决方法

猴子分桃问题的解决方法 1 问题 1979年,李政道博士给中国科技大学少年班出过一道智趣题:5只猴子分一堆桃子,怎么也分不成5等分,只好先去睡觉,准备第二天分.夜里1只猴子偷偷爬起来,先吃掉一个桃子,然后将其分为5等份,藏起自己的一份就去睡觉了:第二只猴子又爬起来,吃掉一个桃子后,也将桃子分成5等份,藏起自己的一份睡觉去了:以后的3只猴子都先后照此办理.问最初至少有多少个桃子? 现在考虑更加的一般性,说是m只猴子,问最初最少有多少个桃子? 2 解答: 2.1 递推解法 设最初有x个桃子,猴子的个

(二)猴子分桃问题

五只猴子分桃.半夜,第一只猴子先起来,它把桃分成了相等的五堆,多出一只. 于是,它吃掉了一个,拿走了一堆: 第二只猴子起来一看,只有四堆桃.于是把 四堆合在一起,分成相等的五堆,又多出一个.于是,它也吃掉了一个,拿走了一 堆:......其他几只猴子也都是 这样分的.问:这堆桃至少有多少个? 1 #include<stdio.h> 2 int main(void) 3 { 4 int i=0,m=1,x=1; // 开始设桃子的个数为x且初始值为1,m算每次分桃后的个数,自然没分桃的时候也是m

SDUT 1232-猴子分桃(逆推)

猴子分桃 Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述 老猴子辛苦了一辈子,给那群小猴子们留下了一笔巨大的财富--一大堆桃子.老猴子决定把这些桃子分给小猴子. 第一个猴子来了,它把桃子分成五堆,五堆一样多,但还多出一个.它把剩下的一个留给老猴子,自己拿走其中的一堆. 第二个猴子来了,它把桃子分成五堆,五堆一样多,但又多出一个.它把多出的一个留给老猴子,自己拿走其中的一堆. 后来的小猴子都如此照办.最后剩下的桃子全部留给老猴子

5个猴子分桃

猴子分桃 山洞里有一堆桃子,五只猴子来分.第一只猴子把这堆桃子平均分为五份,多了一个,这只猴子把多的一个扔到洞外,拿走了一份:第二只猴子把剩下的桃子平均分成五份,又多了一个,它同样把多的一个扔到洞外,拿走了一份:第三.第四.第五只猴子都是这样做的,问山洞里原来最少有多少个桃子? /*猴子分桃. 问题描述:山洞里有一堆桃子,五只猴子来分. 第一只猴子把这堆桃子平均分为五份,多了一个,这只猴子把多的一个扔到洞外,拿走了一份: 第二只猴子把剩下的桃子平均分成五份,又多了一个,它同样把多的一个扔到洞外,

算法——猴子分桃

想做些有关“算法”的练习题,在网上无意间看到了一道很经典的算法题——猴子分桃,于是百度了一下,才发现这道题的相关文档很多很多,但最多的也就是使用C++或者Java来解决这道题,而自己也是初次接触C++. 1.先介绍一下C++使用最常见的编辑器——dev cpp.附上下载地址:(http://bloodshed-dev-c.en.softonic.com/download); 2.: 3.接着选好所要下载好的地址: 4.剩下的事情就是“一路默认”,直至安装完成. 然后就剩启动Dev C++,启动完

JAVA 基础编程练习题41 【程序 41 猴子分桃】

41 [程序 41 猴子分桃] 题目:海滩上有一堆桃子,五只猴子来分.第一只猴子把这堆桃子凭据分为五份,多了一个,这只猴子把 多的一个扔入海中,拿走了一份.第二只猴子把剩下的桃子又平均分成五份,又多了一个,它同样把多的 一个扔入海中,拿走了一份,第三.第四.第五只猴子都是这样做的,问海滩上原来最少有多少个桃子? package cskaoyan; public class cskaoyan41 { @org.junit.Test public void peach() { int x = 0;

猴子分桃问题

问题: 五只猴子分一堆桃子.第一只猴子把这堆桃子平分为五份,多了一个,这只猴子把多的一个桃子扔入海中,拿走了一份.第二个猴子把剩下的桃子又平分成五份,又多了一个,它同样把多的一个桃子扔入海中,拿走了一份,第三.第四.第五只猴子都是这样做的.问原来最少有多少只桃子? 答案: public class peach { public static void main(String [] args) { int i,sum; for(i=4;i<10000;i++) { sum=i; if(sum%5=