题目
解法:
首先写出递推公式f(0)=A A=nkf(i)=f(i-1)/(n-1)*n+1随便什么方法写出闭形式
f(n)=[(n^n)*(A+n-1)]/[(n-1)^n]-(n-1)题目中告诉f(n)的值,求n最大值
首先观察下前面那个分式,由于
n和n-1互质,所以n^n和(n-1)^n也互质,分式结果要为一个整数,
f(n)+n-1中必须含有因子n^n;换句话说,f(n)+n-1>n^n,题目中给的f(n)可以用32位整数表示,
那么n必然小于12!下面不用说什么了,暴力吧,肯定0MS了~不过为了完美,n^n我用了二进制快速幂~具体看代码吧
代码:
1 Source Code
2 Problem: 1309 User: yzhw
3 Memory: 392K Time: 0MS
4 Language: G++ Result: Accepted
5
6 Source Code
7
8 # include <cstdio>
9 using namespace std;
10 long long pow(int a,int b)
11 {
12 long long ans=1,t=a;
13 while(b)
14 {
15 if(b&1) ans*=t;
16 t*=t;
17 b>>=1;
18 }
19 return ans;
20 }
21 int main()
22 {
23 //freopen("input.txt","r",stdin);
24 int n;
25 while(scanf("%d",&n)!=EOF&&n>=0)
26 {
27 int ans=-1,i;
28 for(i=2;i<=12;i++)
29 {
30 long long t=n;
31 t+=i-1;
32 long long t1=pow(i,i),t2=pow(i-1,i);
33 if(t%t1==0)
34 {
35 t=t/t1*t2-i+1;
36 if(t>=0&&t%i==0) ans=i;
37 }
38 }
39 if(ans==-1) printf("%d coconuts, no solution\n",n);
40 else printf("%d coconuts, %d people and 1 monkey\n",n,ans);
41 }
42 return 0;
43 }
44
45