题目描述:
![](http://acm.hdu.edu.cn/data/images/C177-1003-1.gif)
Giving the N, can you tell me the answer of F(N)?
数学题:推导一下:
f(2*n)=8*n^3-20
f(2*n-1)=4*n^3-3*n^2
代码:
#include<stdio.h>
#include<math.h>
int main(){
int n;
while(scanf("%d",&n)!=EOF && n!=0){
int k;
if(n%2==1){
k=(n+1)/2;
k=k%2009;
k=4*pow(k,3)-3*pow(k,2);
while(k<0) k=k+2009;
k=k%2009;
printf("%d\n",k);
}
else{
if(n==2){printf("7\n");continue;}
k=n/2;
k=k%2009;
k=8*pow(k,3)-20;
while(k<0) k=k+2009;
k=k%2009;
printf("%d\n",k);
}
}
return 0;
}
然后发现超时。。。参考了网上大牛的做法,找循环节,终于知道这个2009是干嘛的了。。。AC代码:
#include<stdio.h>
int F[10000];
int main(){
F[1] = 1;F[2] = 7;
int t, i, mod = 2009;
for(i = 3 ; ;i++ )//找循环节的方法
{
F[i]=F[i-2]-(i-1)*(i-1)*(i-1)+i*i*i;
F[i]%=mod;
if(F[i]==7 && F[i-1] == 1)
break;
}
int circle = i - 2;
int n ;
while(~scanf("%d",&n) && n)
{
n %= circle;
printf("%d\n",F[n]);
}
return 0;
}