洛谷1962 斐波那契數列

2022-03-20 09:30:38 字數 1041 閱讀 8058

• f(1) = 1

• f(2) = 1

• f(n) = f(n-1) + f(n-2) (n ≥ 2 且 n 為整數)

請你求出 f(n) mod 1000000007 的值。

·第 1 行:乙個整數 n

第 1 行: f(n) mod 1000000007 的值

輸入樣例#1:

輸出樣例#1:

輸入樣例#2:

輸出樣例#2:對於 60% 的資料: n ≤ 92

對於 100% 的資料: n在long long(int64)範圍內。

看一看資料範圍

如果使用o(n)的遞推顯然會炸掉

那麼我們有沒有別的方法?

顯然是有的

使用斐波那契數列的遞推公式怎麼樣?

但是,,,裡面帶有根號,如果直接使用顯然是會掉精度的

所以,,,應該怎麼辦

我們知道

f[i]=f[i-1]+f[i-2]

f[i-1]=f[i-2]+f[i-3]

所以我們可以用矩陣來表示

因此我們可以繼續推導

可以得到

接下來使用矩陣快速冪就可以直接求解

#include#include#include#include#include#includeusing namespace std;

#define mod 1000000007

#define max 10

#define ll long long

struct yl//矩陣

;yl operator *(yl a,yl b)//定義乘法

void write(yl a)

if(n==1||n==2)

else

}

洛谷1962 斐波那契數列

思路 常見演算法時矩陣快速冪,但事實上這題可以不需要矩陣快速冪。設斐波那契數列為 f 觀察規律可以發現 當 n 為偶數時,f n f times 2 f n times f n 當 m 為奇數時,f n f 2 f n 2 這樣只要用乙個map記錄已經計算過的fibonacci數,遞迴求得答案即可。...

洛谷P1962 斐波那契數列

f 1 1 f 2 1 f n f n 1 f n 2 n 2 且 n 為整數 請你求出 f n mod 1000000007 的值。輸入格式 第 1 行 乙個整數 n 輸出格式 第 1 行 f n mod 1000000007 的值 輸入樣例 1 5 輸出樣例 1 5 輸入樣例 2 10 輸出樣例...

洛谷P1962 斐波那契數列

f 1 1 f 2 1 f n f n 1 f n 2 n 2 且 n 為整數 請你求出 f n mod 1000000007 的值。輸入格式 第 1 行 乙個整數 n 輸出格式 第 1 行 f n mod 1000000007 的值 輸入樣例 1 5 輸出樣例 1 5 輸入樣例 2 10 輸出樣例...