Advertisement
Guest User

Anderson Franz

a guest
Nov 12th, 2019
118
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.60 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. #define REP(i,n) for (int i = 1; i <= n; i++)
  3. using namespace std;
  4.  
  5. typedef int64_t ll;
  6. typedef vector<vector<ll> > matrix;
  7. const ll MOD = 13371337;
  8. const ll K = 4;
  9.  
  10.  
  11. //SOLUÇÃO DA RECORRÊNCIA F(N) = F(N-2)+ (2^N*N^2)
  12.  
  13. matrix mul(matrix A, matrix B){
  14.     matrix C(K+1, vector<ll>(K+1));
  15.     REP(i, K) REP(j, K) REP(k, K){
  16.         C[i][j] = (C[i][j]%MOD + (A[i][k]%MOD) * (B[k][j] < 0 ? B[k][j]%-MOD : B[k][j]%MOD)) % MOD;
  17.     }
  18.     return C;
  19. }
  20.  
  21. matrix pow(matrix A, ll p){
  22.     if (p == 1)
  23.         return A;
  24.     if (p % 2)
  25.         return mul(A, pow(A, p-1));
  26.     matrix X = pow(A, p/2);
  27.     return mul(X, X);
  28. }
  29.  
  30. ll fib(ll N,ll resp[]){
  31.     vector<ll> F1(K+1);
  32.     F1[1] = resp[0];
  33.     F1[2] = resp[1];
  34.     F1[3] = resp[2];
  35.     F1[4] = resp[3];
  36.  
  37.     matrix T(K+1, vector<ll>(K+1));
  38.     T[1][1] = 4ll, T[1][2] = -4ll, T[1][3] = 0ll, T[1][4] = 1ll;
  39.     T[2][1] = 1ll, T[2][2] = 0ll, T[2][3] = 0ll, T[2][4] = 0ll;
  40.     T[3][1] = 32ll, T[3][2] = -32ll, T[3][3] = 1ll, T[3][4] = 8ll;
  41.     T[4][1] = 0ll, T[4][2] = 0ll, T[4][3] = 0ll, T[4][4] = 2ll;
  42.  
  43.     if (N == 1)
  44.         return 1ll;
  45.     T = pow(T, N-1);
  46.  
  47.     ll res = 0ll;
  48.     REP(i, K)
  49.         res = (res%MOD + (T[3][i]%MOD) * (F1[i]%MOD)) % MOD;
  50.     return res%MOD;
  51.  
  52. }
  53.  
  54. int main(){
  55.     ll k,a,b,c,d;
  56.     while(cin>>k && k){
  57.         ll resp[]={32,9,0,8};    
  58.         ll arr[]={0,2,2+16,2+16+64,2+16+64+256};  
  59.         ll ans = 0;
  60.         if(k <= 4)
  61.           ans = arr[k];
  62.         else
  63.           ans = fib(k-3,resp)+2+16+64+256;
  64.         ans%=MOD;
  65.         cout<<ans<<endl;
  66.     }
  67.     return 0;
  68. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement