题目描述

Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1。

当n比较大时,Fn也非常大,现在我们想知道,Fn除以10007的余数是多少。

输入格式

输入包含一个整数n。

输出格式

输出一行,包含一个整数,表示Fn除以10007的余数。

样例输入

10

样例输出

55

样例输入

22

样例输出

7704

数据规模与约定

1 <= n <= 1,000,000。

思路

归会暴栈,如果求出最后的F[N],则F[N]已经溢出,故需要利用动态规划+等价类

公式:

dp[1] = 1 ; dp[2]= 1 ;

for(int i = 3 ; i <= n ; ++i) {dp[i] = (dp[i-1] + dp[i-2])%10007;

参考代码

#include <bits/stdc++.h>
using namespace std;
int main(int argc, char const *argv[])
{
int n = 0 ;
cin >> n ;
vector<int> dp(n+1);
dp[1] = 1 ; dp[2]= 1 ;
for(int i = 3 ; i <= n ; ++i) {dp[i] = (dp[i-1] + dp[i-2])%10007;}
cout << dp[n];
return 0;
}

谢谢访问