1. 程式人生 > >計蒜客:斐波那契數列

計蒜客:斐波那契數列

問題:

相信小夥伴們都學過斐波那契數列,它是這樣的一個數列: 1 , 1 , 2 , 3 , 5

, 8 , 13 , 21 1,1,2,3,5,8,13,21\cdots
f
n f_n
表示斐波那契數列的第 n n 項,則有: f 1
= f 2 = 1 f_1 = f_2 = 1
f n = f n 1 + f n 2 ( n > 2 ) f_n = f_{n-1} + f_{n-2} (n > 2)
輸入一個 n n ,求出 f n f_n 1000000007 ( 1 0 9 + 7 ) 1000000007(10^9+7) 取模結果。

輸入格式:
輸入一個整數 n ( 1 n 100000 ) n(1 \le n \le 100000)

輸出格式:
輸入 f n m o d 1000000007 f_n \mathrm{mod} 1000000007 的值。

樣例輸入:

3

樣例輸出:

2

題解:

思路:根據斐波那契的公式:
f 1 = f 2 = 1 f_1 = f_2 = 1
f n = f n 1 + f n 2 ( n > 2 ) f_n = f_{n-1} + f_{n-2} (n > 2)
開闢一個一位陣列,把1-n的數算出來,然後在mod 1000000007

#include<iostream>
using namespace std;
const int N = 1000000007;
int main(void)
{
	int n;
	cout << "請輸入一個整數(1-100000):";
	cin >> n;
	int *p = new int[n];
	p[0] = p[1] = 1;
	for (int i = 2; i < n; i++)
	{
		p[i] = (p[i - 1] + p[i - 2]) % N;
	}
	cout << p[n-1] % N << endl;
	system("pause");
	return 0;
}