#include <iostream>
using namespace std;
typedef long long ll;
const int MOD = 1e9 + 7;
#define mod(a) (ll(a)%MOD)
struct MATRIX{
ll a[2][2];
};
MATRIX a;
ll f[2];
void ANS_Cf(MATRIX a) {
f[0] = mod(a.a[0][0] + a.a[1][0]);
f[1] = mod(a.a[0][1] + a.a[1][1]);
return ;
}
MATRIX MATRIX_Cf(MATRIX a, MATRIX b) {
MATRIX ans;
int k;
for(int i = 0; i < 2; i++) {
for(int j = 0; j < 2; j++) {
ans.a[i][j] = 0;
k = 0;
while(k < 2) {
ans.a[i][j] += a.a[k][i]*b.a[j][k];
ans.a[i][j] = mod(ans.a[i][j]);
++k;
}
}
}
return ans;
}
MATRIX MATRIX_Pow(MATRIX a , ll n) {
MATRIX ans;
ans.a[0][0] = 1;
ans.a[1][1] = 1;
ans.a[0][1] = 0;
ans.a[1][0] = 0;
while(n) {
if(n & 1) {
ans = MATRIX_Cf(ans , a);
}
n >>= 1;
a = MATRIX_Cf(a , a);
}
return ans;
}
int main() {
ll n;
while(cin >> n) {
if(n == 1) {
cout<<'1'<<endl;
continue;
}
a.a[0][0] = a.a[0][1] = a.a[1][0] = 1;
a.a[1][1] = 0;
a = MATRIX_Pow(a , n - 2);
ANS_Cf(a);
cout<<f[0]<<endl;
}
return 0;
}斐波那契额数列 矩阵快速
矩阵快速幂求斐波那契数
最新推荐文章于 2024-11-15 17:20:35 发布
本文介绍了一种使用矩阵快速幂算法高效计算斐波那契数的方法。通过定义特定的矩阵并利用快速幂运算,可以在对数时间内求得第n个斐波那契数,有效解决了传统递归方法的时间复杂度过高的问题。
1万+

被折叠的 条评论
为什么被折叠?



