天天看點

菲波那契數列(2)-基本算法之遞歸變遞推

菲波那契數列(2)-基本算法之遞歸變遞推

總時間限制: 1000ms 記憶體限制: 65536kB

描述

菲波那契數列是指這樣的數列: 數列的第一個和第二個數都為1,接下來每個數都等于前面2個數之和。

給出一個正整數a,要求菲波那契數列中第a個數對1000取模的結果是多少。

輸入

第1行是測試資料的組數n,後面跟着n行輸入。每組測試資料占1行,包括一個正整數a(1 <= a <= 1000000)。

輸出

n行,每行輸出對應一個輸入。輸出應是一個正整數,為菲波那契數列中第a個數對1000取模得到的結果。

樣例輸入

4

5

2

19

1

樣例輸出

5

1

181

1

#include<iostream>
using namespace std;
//http://noi.openjudge.cn/ch0203/1760/
//有意思,原來這個數列每次%1000然後再計算的值是不變的
//開始不用求餘的結果計算的時候遇到大數會輸出負數,也就是越界 
int n;
typedef long long ll;
ll a,k,b[];
void f(ll x){
    for(;x<=a;x++){
        b[x]=(b[x-]+b[x-])%;
    }
}
int main(){
    cin>>n;
    b[]=;
    b[]=;
    b[]=;
    k=;
    while(n--){
        cin>>a;
        if(a<=k)cout<<b[a]%<<endl;
        else{
            f(k);
            k=a;
            cout<<b[a]%<<endl;
        }
    }
}
           

繼續閱讀