Advertisement
Guest User

bileAN_nu_ok

a guest
Nov 20th, 2017
57
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.12 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4. ifstream fin("bilean.in");
  5. ofstream fout("bilean.out");
  6. const int mod=301104;
  7.  
  8. int N, i;
  9. int MAT[3][3], SOL[3][3];
  10.  
  11. inline void mult(int A[][3], int B[][3], int C[][3])
  12. {
  13.     int i, j, k;
  14.     for (i = 0; i < 2; i++)
  15.         for (j = 0; j < 2; j++)
  16.             for (k = 0; k < 2; k++)
  17.                 C[i][j] = (C[i][j] + 1LL * A[i][k] * B[k][j]) % mod;
  18.  
  19. }
  20.  
  21. inline void lg_power(int P, int M[][3])
  22. {
  23.     int C[3][3], AUX[3][3], i;
  24.  
  25.     memcpy(C, MAT, sizeof(MAT));
  26.     M[0][0] = M[1][1] = 1;
  27.  
  28.     for (i = 0; (1 << i) <= P; i++)
  29.     {
  30.         if (P & (1 << i))
  31.         {
  32.             memset(AUX, 0, sizeof(AUX));
  33.             mult(M, C, AUX);
  34.             memcpy(M, AUX, sizeof(AUX));
  35.         }
  36.         memset(AUX, 0, sizeof(AUX));
  37.         mult(C, C, AUX);
  38.         memcpy(C, AUX, sizeof(C));
  39.     }
  40. }
  41.  
  42. int main()
  43. {
  44.     fin>>N;
  45.     if(N==1)
  46.         fout<<2;
  47.     else if(N==2)
  48.         fout<<3;
  49.     else
  50.     {
  51.         MAT[0][0] = 0; MAT[0][1] = 1; MAT[1][0] = 1; MAT[1][1] = 1;
  52.         lg_power(N+1, SOL);
  53.         fout<<SOL[1][1];
  54.     }
  55.     return 0;
  56. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement