谁能帮我解决“狄拉克问题”

来源:百度知道 编辑:UC知道 时间:2024/06/20 00:14:15
有一堆桃子和5个猴子,第一个猴子来了,把桃子平均分成5份,结果剩下1个,于是吃掉了这个桃子,然后拿走了自己的1份桃子。第二个猴子来了,不知道前边发生的事情,便把桃子平均分成5份,结果又剩下1个,它吃了这个桃子后,取走了其中的1份。以后,其余3只猴子来了,都是如此处理。问:原来最少有多少个桃子?最后最少剩多少个桃子?
最后结果是???????????????????

第一个猴子把桃子分成五份,发现剩下了一个。那么如果开始的桃子多4个,结果会如何。
很明显,第一个猴子会发现桃子可以平均分成五份了,它就不用吃了,直接拿走了一份,这样留给第二个猴子的桃子比原来留给第二个猴子的桃子还是多4个。这让第二个猴子也可以直接分成五份拿走一份,不用吃掉。以此类推,最后一个猴子拿完之后,剩下的是总桃子数×(4/5)的五次方=(1024/3125)×总桃子数,要让这个结果为整数,则总桃子最少为3125个,剩余1024个.最后把我们加入的4个桃子减掉,总桃子最少3121个,剩余1020个。
本题有人称为狄拉克问题,有人称为怀特海(数学家,哲学家怀特海的侄子)问题,实际上狄拉克是听怀特海讲的解法,而怀特海说他也是听来的解法。

我只会用程序傻算……

假设最后有4n个桃子。
则第五猴拿走或吃掉共n+1个桃子;
第四……(5n+1)/4+1;
第三……((5n+1)*5/4+1)*5/4+1;
第二……(((5n+1)*5/4+1)*5/4+1)*5/4+1;
第一……((((5n+1)*5/4+1)*5/4+1)*5/4+1)*5/4+1……
要想是整数,
for n=1:1000
if ((5*n+1)/4)==round((5*n+1)/4)
if (((5*n+1)*5/4+1)*5/4)==round((((5*n+1)*5/4+1)*5/4))
if (((((5*n+1)*5/4+1)*5/4+1))*5/4)==round((((((5*n+1)*5/4+1)*5/4+1))*5/4))
if ((((((5*n+1)*5/4+1)*5/4+1))*5/4+1)*5/4)==round(((((((5*n+1)*5/4+1)*5/4+1))*5/4+1)*5/4))
n,
end;
end;
end;
end;
end;

结果1000以内符合的数字有:
n = 255
n = 511
n = 767

最后剩余4×n=1020个。