• 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 輸出樣例...