Advertisement
MiinaMagdy

12470 - Tribonacci

Jan 29th, 2024
746
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.26 KB | None | 0 0
  1. /*
  2. +---------------------------------------------+
  3. |                                             |
  4. |       © 29/01/2024 (15:37) MinaMagdy        |
  5. |                                             |
  6. +---------------------------------------------+
  7. */
  8. #include <bits/stdc++.h>
  9. #include <ext/pb_ds/assoc_container.hpp>
  10. #include <ext/pb_ds/tree_policy.hpp>
  11.  
  12. using namespace std;
  13. using namespace __gnu_pbds;
  14. #define ordered_set tree<int, null_type, less<int>, rb_tree_tag, tree_order_statistics_node_update>
  15. #define multi_ordered_set tree<int, null_type, less_equal<int>, rb_tree_tag, tree_order_statistics_node_update>
  16. #define endl "\n"
  17. #define MOD 1000000007
  18. #define INF 2000000000
  19. #define all(s) s.begin(), s.end()
  20. #define rall(s) s.rbegin(), s.rend()
  21. #define sz(x) int(x.size())
  22.  
  23. typedef long long ll;
  24. typedef long double ld;
  25. typedef unsigned long long ull;
  26. #include <ext/numeric>
  27. using namespace __gnu_cxx;
  28. const int mod = 1000000009;
  29. typedef vector<vector<int>> matrix;
  30. struct mul
  31. {
  32.     int n;
  33.     mul(int n) : n(n) {}
  34.     matrix operator()(const matrix &a, const matrix &b)
  35.     {
  36.         assert(a[0].size() == b.size());
  37.         matrix c(a.size(), vector<int>(b[0].size(), 0));
  38.         for (int i = 0; i < a.size(); i++)
  39.         {
  40.             for (int j = 0; j < b[0].size(); j++)
  41.             {
  42.                 for (int k = 0; k < b.size(); k++)
  43.                 {
  44.                     c[i][j] += a[i][k] * 1ll * b[k][j] % mod;
  45.                     if (c[i][j] >= mod)
  46.                         c[i][j] -= mod;
  47.                 }
  48.             }
  49.         }
  50.         return c;
  51.     }
  52. };
  53.  
  54. matrix identity_element(const mul &m)
  55. {
  56.     matrix res(m.n, vector<int>(m.n, 0));
  57.     for (int i = 0; i < m.n; i++)
  58.         res[i][i] = 1;
  59.     return res;
  60. }
  61.  
  62. void solve()
  63. {
  64.     ll n;
  65.     while (cin >> n, n)
  66.     {
  67.         matrix m = {
  68.             {0, 1, 0},
  69.             {0, 0, 1},
  70.             {1, 1, 1}};
  71.         matrix f1 = {
  72.             {0},
  73.             {1},
  74.             {2}};
  75.         mul mm(3);
  76.         cout << mm(power(m, n - 1, mm), f1)[0][0] << endl;
  77.     }
  78. }
  79.  
  80. int main(void)
  81. {
  82.     ios_base::sync_with_stdio(false), cin.tie(NULL), cout.tie(NULL);
  83.     int testcase = 1;
  84.     // cin >> testcase;
  85.     while (testcase--)
  86.         solve();
  87.     return 0;
  88. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement