「POJ 3070」Fibonacci - 矩阵乘法
题意描述
给定一个数 \(n\),求斐波那契数列第 \(n\) 项的后四位。
数据范围:\(1 \leq n \leq 10^9\)
解题思路
我们可以使用矩阵来加速地推。
我们知道斐波那契的通项公式为:
\[ a_i = a_{i - 1} + a_{i - 2} \]
故我们可以设矩阵 \(F(n)\):
\[ F(n) = \begin{bmatrix} a_n & a_{n + 1} \end{bmatrix} \]
同时我们可以设:
\[ F(n) = F(n - 1) \times X \]
即为:
\[ \begin{bmatrix} a_n & a_{n + 1} \end{bmatrix} = \begin{bmatrix} a_{n - 1} & a_n \end{bmatrix} \times X \]
我们可以推出:
\[ \begin{bmatrix} a_n & a_{n + 1} \end{bmatrix} = \begin{bmatrix} a_{n - 1} & a_n \end{bmatrix} \times \begin{bmatrix} 0 & 1 \\ 1 & 1 \end{bmatrix} \]
所以我们最终可以推出下列式子:
\[ F(n) = F(1) \times \begin{bmatrix} 0 & 1 \\ 1 & 1 \end{bmatrix} ^ {n - 1} = \begin{bmatrix} 1 & 1 \end{bmatrix} \times \begin{bmatrix} 0 & 1 \\ 1 & 1 \end{bmatrix} ^ {n - 1} \]
最终利用快速幂就可以在 \(O(\log n)\) 的时间复杂度中求出答案。
代码演示
1 |
|