杭电2802

来源:互联网 发布:linux 自启动文件 编辑:程序博客网 时间:2024/06/05 00:36
题目描述:

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;}



0 0
原创粉丝点击