斐波那契數列(矩陣加速遞推)

2022-02-27 06:34:23 字數 1153 閱讀 4915

• 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 的值

(n<=1e18)

我們已經知道遞推公式了,但有個問題,就是n太大

怎麼辦呢?

我前面寫過乙個矩陣快速冪的板子,大家應該看過。

那麼,這裡我們就要用矩陣快速冪來優化

我們將原數列抽象為這樣的乙個矩陣:

那麼,我們將原矩陣乘上這樣的乙個矩陣:

就變成了這樣:

整個矩陣向著斐波那契的下一項方向移動

ok,現在我們就不用o(n)地移動了,o(logn)即可

(關於矩陣快速冪部分,請參見我以前的一篇部落格(上面有鏈結))

#include#include

#include

#define rii register int i

#define rij register int j

#define rik register int k

#define mod 1000000007

using

namespace

std;

struct

jx,y,z,an;

long

long

n;long

long ys[5

];inline j cheng(j l,j r)

ltt.jz[i][j]=ans;}}

return

ltt;

}j pw(j k,

long

long

c)

if(c%2==0

)

else

}int

main()

if(n==2

)

pw(x,n-2

); an=cheng(y,an);

cout

<1][1

];}

矩陣加速遞推(XDU 斐波那契數列為列)

這是xdu校網路塞的一道題目,斐波那契數列。看到給出的資料那麼大,心想,既然給出了mod,說不定有乙個迴圈節呢,可是直到n達到10 6都還沒有出現迴圈節,只有放棄了,然後覺得可以解線性遞推式的特徵根來求解,簡單化了幾下,感覺不妥,然後放棄了。後來白神說,這題可以用矩陣加速,感謝白神又讓我a了一題。啥...

矩陣 斐波那契數列

利用矩陣來求解斐波那契數列的有關問題是acm題中乙個比較常見的題型。例 nyoj 148 斐波那契數列2 有關斐波那契樹列的規律詳見這裡。1 對於n 1,都有f n 與f n 1 互質。2 f n f i f n i 1 f i 1 f n i 現在說說怎麼利用矩陣來求解斐波那契數列。我們可以先儲存...

模板 矩陣加速(數列)(矩陣加速遞推)

a 1 a 2 a 3 1 a x a x 3 a x 1 x 3 求a數列的第n項對1000000007 10 9 7 取餘的值。輸入格式 第一行乙個整數t,表示詢問個數。以下t行,每行乙個正整數n。輸出格式 每行輸出乙個非負整數表示答案。矩陣加速裸題 和我的前一篇基本一模一樣 只不過改變了要乘的...