Fibonacci数列

Fibonacci数列
题目来源:牛客网 https://ac.nowcoder.com/acm/problem/14359

题目描述 

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

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

输入描述:

输入包含一个整数n。

输出描述:

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


这个题目数据范围较大,直接递归并且在递归过程中进行取余,会造成超时。
因此,可以对每个Fibonaci数列里的数先取余,并把它们放入一个数组中,然后只对数组进行递归,这样可以节省时间。
代码如下:
#include <iostream>
#include<cstdio>

using namespace std;
const int maxn=1e6+10;
int a[maxn];

int Fib(int n)
{
    if(n==1||n==2)
    return 1;
    else
    return a[n-1]+a[n-2];
}

int main() {
    int n;
    cin>>n;
    a[1]=1;
    a[2]=1;
    for(int i=3;i<=n;i++)
    {
        a[i]=a[i-1]%10007+a[i-2]%10007;
    }
    int ans=Fib(n)%10007;
    cout<<ans;
}
原文地址:https://www.cnblogs.com/theshorekind/p/14476711.html