在 Fibonacci 数列中,F10]=0,F111=1,Fn]=Fn-11 Fn-21(n>=2)。也就是说,Fibonacci 数列的每一项都是前两项的和。举个例子,前十个数分别是 0、1、1、2、3、5、8、13、21、34。
要求计算 Fibonacci 数列的第 n 项,并输出末四位。这道题可以用矩阵乘法来做。
假设我们已经计算出了 F[n-1] 和 F[n-2],那么 F[n] 就是它们的和。我们可以用矩阵乘法的形式来表示这个过程:
[F[n] F[n-1]] = [F[n-1] F[n-2]] * [1 1]
也就是说,如果我们已经计算出了 F[n-1] 和 F[n-2],那么可以通过矩阵乘法的形式来快速计算出 F[n]。
让我们来看看代码实现:
``` #include
using namespace std;
const int N = 1000000;
struct Matrix { int a[2][2]; Matrix() { memset(a, 0, sizeof a); } };
Matrix operator*(const Matrix& a, const Matrix& b) { Matrix c; for (int i = 0; i < 2; i++) for (int j = 0; j < 2; j++) for (int k = 0; k < 2; k++) c.a[i][j]