1 #include<bits/stdc++.h> 2 using namespace std; 3 typedef long long ll; 4 const int mod = 1e9+7; 5 struct Matrix { 6 int a[3][3]; 7 Matrix() { memset(a, 0, sizeof a); } 8 Matrix operator*(const Matrix &b) const {//重载矩阵乘法 9 Matrix res; 10 for (int i = 1; i <= 2; ++i) 11 for (int j = 1; j <= 2; ++j) 12 for (int k = 1; k <= 2; ++k) 13 res.a[i][j] = (res.a[i][j] + a[i][k] * b.a[k][j]) % mod; 14 return res; 15 } 16 }ans,base;//初始矩阵ans,乘法矩阵base 17 18 void init() { 19 base.a[1][1] = base.a[1][2] = base.a[2][1] = 1; 20 ans.a[1][1] = ans.a[1][2] = 1; 21 } 22 23 void qpow(int b) {//矩阵快速乘 24 while (b) { 25 if (b & 1) ans = ans * base; 26 base = base * base; 27 b >>= 1; 28 } 29 } 30 31 int main() { 32 int n;scanf("%d",&n); 33 if (n <= 2) return puts("1"), 0; 34 init(); 35 qpow(n - 2); 36 printf("%d",ans.a[1][1] % mod);//ans.a[1][1]为F(n) 37 }