5个猴子分桃子

五只猴子采得一堆桃子,猴子彼此约定隔天早起后再分食。不过,就在半夜里,一只猴子偷偷起来,把桃子均分成五堆后,发现还多一个,它吃掉这桃子,并拿走了其中一堆。第二只猴子醒来,又把桃子均分成五堆后,还是多了一个,它也吃掉这个桃子,并拿走了其中一堆。第三只,第四只,第五只猴子都依次如此分食桃子。那么桃子数最少应该有几个呢?

function test($n){
$num = 5*$n+1;
for($i=5;$i>1;$i–){
$num = ($num/4)*5+1;
}
if(is_int($num)){
return $num;
}else{
$num=test(++$n);
return $num;
}
}
echo test(1);

说明:
第5只猴子分时,假定是5n+1
到第4只就是5*(5n+1)/4 +1 = (25n+9)/4
到第3只就是 (125n+45)/16+1= (125n+61)/16
第2只就是(625n+369)/64
第一只猴子就是(3125n + 5*369+256)/256
也就是3125n + 5*369+256能被256整除的最小正n
(3125n + 5*369+256) mod 256 = (53n+53)mod 256 = 53(n+1) mod 256
(n+1) mod 256 =0 ==> n = 255
代进(3125n + 5*369+256)/256 得到:3125 + 5+1 +(-3125 +5*113)/256 = 3131 -(3125-565)/256=3121

设开始有x个桃子,我们把x写成(x+4)-4.
第一个猴子来了,吃掉1个,还有桃子 (x+4)-4-1=(x+4)-5,
这时恰好可分成5份,每份的桃子数为 [(x+4)-5]/5=(x+4)/5-1
(x+4)/5必须为整数,所以(x+4)是5的倍数,
第一个猴子藏掉一份后,剩下的桃子为:(4/5)×[(x+4)-5]=(4/5)×(x+4)-4
同样,第二个猴子来了,一吃一藏之后,剩下的桃子数为 (4/5)×[(4/5)×(x+4)-5]
由于(4/5)×(4/5)×(x+4)是整数,故(x+4)应是5×5=25的倍数,
如此一来五个猴子一吃一藏,恰好剩下 (4/5)×(4/5)× (4/5)×(4/5) ×(4/5) ×(x+4)-5个桃子,
故(x+4)必须是5×5×5×5×5的倍数,
即x+4=5^5
所以: x=3125-4=3121
即开始最少有3121个桃子.

相关内容:

Leave a comment

3 Comments.

  1. 程序加数学,简直是我的克星啊

  2. 我想说和一楼一样的话。

  3. 曾经一次面试,10多道算法题,唉,,

发表评论

您的电子邮箱不会被公开。 标记为 * 的区域必须填写

*


您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="">

有人回复时邮件通知我