#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int MOD = 10000;
// 矩阵乘法函数,计算a和b的乘积,结果存储在a中
void mul(int a[][2], int b[][2])
{
int c[2][2] = {0};
for (int i = 0; i < 2; i ++ )
for (int j = 0; j < 2; j ++ )
for (int k = 0; k < 2; k ++ )
c[i][j] = (c[i][j] + a[i][k] * b[k][j]) % MOD;
memcpy(a, c, sizeof c);
}
// 快速幂算法,计算斐波那契数列的第n项
int fib(int n)
{
int a[2][2] = {0, 1, 0, 0}; // 初始化单位矩阵
int f[2][2] = {0, 1, 1, 1}; // 初始化斐波那契数列递推矩阵
while (n)
{
if (n & 1) mul(a, f); // 如果n是奇数,将a与f相乘
mul(f, f); // 将f平方
n >>= 1; // n除以2
}
return a[0][0]; // 返回a的第一个元素,即斐波那契数列的第n项
}
int main()
{
int n;
while (cin >> n, n != -1) // 输入n,当n不等于-1时继续循环
cout << fib(n) << endl; // 输出斐波那契数列的第n项
return 0;
}
205. 斐波那契 快速幂 矩阵乘法
最新推荐文章于 2024-05-29 22:00:10 发布