斐波那契递推
时间限制(普通/Java) : 1000 MS/ 3000 MS 运行内存限制 : 65536 KByte
总提交 : 31 测试通过 : 7
总提交 : 31 测试通过 : 7
比赛描述
著名的斐波那契问题导出的递推式为f[n] = f[n-1] + f[n-2] (n>=2)f[0] = f[1] = 1考虑这样的递推式 c[n] = 2012*c[n-1]
+ c[n-2]已知 n, 计算 c[n] mod 9901
输入
多组测试数据,每组测试数据占一行,一个正整数 n (n 在 int 范围内 )
输出
对每一个 n,输出 c[n] mod 9901
样例输入
1
2
样例输出
1
2013
提示
undefined
题目来源
NUPT ACM
/* Time Limit Exceed at Test 2
#include<iostream>
#define MOD 9901
int main(){
int n,a,b,c;
while(scanf("%d",&n)==1){
if(n==1){
printf("1\n");
continue;
}
b = c = 1;
n--;
while(n--){
a = b;
b = c;
c = (2012*b+a)%MOD;
}
printf("%d\n",c);
}
}
*/
/* 周期19804
#include<iostream>
#include<set>
using namespace std;
#define MOD 9901
int main(){
int n,a,b,c;
set<int> is;
for(int i=1;i<1000000;i++){
n = i;
if(n==1){
// printf("1\n");
is.insert(1);
continue;
}
b = c = 1;
n--;
while(n--){
a = b;
b = c;
c = (2012*b+a)%MOD;
}
if(c==1){
printf("n=%d,c[n]=%d",i,c);
}
// printf("%d\n",c);
// if(is.count(c)){
// printf("n=%d,c[n]=%d has occured twice\n",i,c);
// break;
// }
// is.insert(c);
}
}
*/
#include<iostream>
#define MOD 9901
int main(){
int n,a,b,c;
while(scanf("%d",&n)==1){
n %= 19804;
if(n<=1){
printf("1\n");
continue;
}
b = c = 1;
n--;
while(n--){
a = b;
b = c;
c = (2012*b+a)%MOD;
}
printf("%d\n",c);
}
}