猴子分桃

猴子分桃

Time Limit: 1000 ms Memory Limit: 65536 KiB
Problem Description

老猴子辛苦了一辈子,给那群小猴子们留下了一笔巨大的财富——一大堆桃子。老猴子决定把这些桃子分给小猴子。

第一个猴子来了,它把桃子分成五堆,五堆一样多,但还多出一个。它把剩下的一个留给老猴子,自己拿走其中的一堆。

第二个猴子来了,它把桃子分成五堆,五堆一样多,但又多出一个。它把多出的一个留给老猴子,自己拿走其中的一堆。
后来的小猴子都如此照办。最后剩下的桃子全部留给老猴子。

这里有n只小猴子,请你写个程序计算一下在开始时至少有多少个桃子,以及最后老猴子最少能得到几个桃子。

Input

输入包括多组测试数据。
每组测试数据包括一个整数n(1≤n≤10)。
输入以0结束,该行不做处理。

Output

每组测试数据对应一行输出。
包括两个整数a,b。
分别代表开始时最小需要的桃子数,和结束后老猴子最少能得到的桃子数。

Sample Input
5
1
0
Sample Output
3121 1025

1 1

#include<stdio.h> 
 
int main()
{
    long long int k;
    long long int p;
    int n, i;
    while(~scanf("%d", &n) &&n != 0)
    {
        k = 1;
        for(i = 0; i < n; i++)
        {
            k = k * 5;
        }
        k = k - 4;
        p = k;
        for(i = 0; i < n; i++)
        {
            p = (p - 1) / 5 * 4;
        }
        p = p + n;
        printf("%lld %lld\n", k, p);
    }
    return 0;


}



解题

假设桃子一起有x个,第i只猴子用aiai表示,第一只儿子拿走的桃子数为:a1=15(x1)a1=15(x−1)。第二只儿子拿走的桃子数为:a2=(4a11)5a2=(4a1−1)5,第三只猴子拿走的桃子数为:a3=(4a21)5a3=(4a2−1)5,••••••以此类推。 
根据分析有递推关系:

an=(4an11)5an=(4an−1−1)5
5an=4an11⇔5an=4an−1−1
5(an+1)=4(an1+1)⇔5(an+1)=4(an−1+1)

  得

an+1=(45)n1(a1+1)an+1=(45)n−1(a1+1)
an=(45)n1(a1+1)1⇔an=(45)n−1(a1+1)−1

  又a1=15(x1)a1=15(x−1)代入可得:

an=(45)n1(15(x1)+1)1an=(45)n−1(15(x−1)+1)−1
an=4n15n(x+4)1⇔an=4n−15n(x+4)−1

  因为anan为整数,所以x+4x+45n5n的倍数。要取xx最小,令x+4=5nx+4=5n,得:

x=5n4x=5n−4

  即为所求的总的桃子数。

 所有小猴子分得的桃子数


  所有小猴子分得的桃子数:

i=1nai∑i=1nai
i=1n((45)i1(ai+1)1)⇔∑i=1n((45)i−1(ai+1)−1)
(ai+1)i=1n(45)i1n⇔(ai+1)∑i=1n(45)i−1−n
(ai+1)(1(45)n145)n⇔(ai+1)(1−(45)n1−45)−n

  又,a1=15(x1)a1=15(x−1)x=5n4x=5n−4,得:

a1=5n11a1=5n−1−1

  再得:

5n1(1(45)n145)n5n−1(1−(45)n1−45)−n
45n14nn⇔4∗5n−1−4n−n

  因此小猴子们分的桃子总数为:

5n4nn5n−4n−n

2.3 老猴子最后获得的桃子数


5n4(5n4nn)5n−4−(5n−4n−n)
4n+n4

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值