ZhongJiaXuan

P1962 斐波那契数列

Dec 15th, 2023
118
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.77 KB | Source Code | 0 0
  1. #include <bits/stdc++.h>
  2. #define int long long
  3. using namespace std;
  4. const int Mod = 1e9 + 7;
  5. int n;
  6. struct Node {
  7.     int a[5][5] {};
  8.     friend Node operator*(Node a, Node b) {
  9.         Node ans;
  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.                     ans.a[i][j] += a.a[i][k] * b.a[k][j], ans.a[i][j] %= Mod;
  14.         return ans;
  15.     }
  16. } ans, b;
  17. signed main() {
  18.     cin >> n;
  19.     if (n <= 2) {
  20.         cout << 1 << endl;
  21.         return 0;
  22.     }
  23.  
  24.     b.a[1][1] = b.a[1][2] = b.a[2][1] = 1;
  25.     ans.a[1][1] = ans.a[1][2] = 1;
  26.     n -= 2;
  27.     while (n) {
  28.         if (n & 1) ans = ans * b;
  29.         b = b * b;
  30.         n = n >> 1;
  31.     }
  32.     cout << ans.a[1][1] << endl;
  33. }
Advertisement
Add Comment
Please, Sign In to add comment