Advertisement
Pabon_SEC

Modular Fibonacci

Sep 27th, 2016
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.35 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. struct matrix
  6. {
  7.     long long v[5][5];
  8.  
  9.     long long row,col;
  10.  
  11. } ans,mat;
  12.  
  13. long long mod;
  14.  
  15. matrix multiply(matrix a, matrix b)
  16. {
  17.     matrix r;
  18.  
  19.     for(int i=0; i<2; i++)
  20.     {
  21.         for(int j=0; j<2; j++)
  22.         {
  23.             long long sum = 0;
  24.  
  25.             r.v[i][j] = 0;
  26.  
  27.             for(int k=0; k<2; k++)
  28.             {
  29.                 sum+=a.v[i][k]*b.v[k][j];
  30.  
  31.                 sum%=mod;
  32.             }
  33.  
  34.             r.v[i][j] = sum;
  35.         }
  36.     }
  37.  
  38.     return r;
  39. }
  40.  
  41. matrix power(long long p)
  42. {
  43.     assert(p>=1);
  44.  
  45.     if(p==1)
  46.     {
  47.         return mat;
  48.     }
  49.  
  50.     if(p%2==1)
  51.     {
  52.         return multiply(mat,power(p-1));
  53.     }
  54.  
  55.     matrix ret = power(p/2);
  56.  
  57.     ret = multiply(ret,ret);
  58.  
  59.     return ret;
  60. }
  61.  
  62. int main()
  63. {
  64.     long long n,i,j,power_of_two;
  65.  
  66.     mat.row = mat.col = 2;
  67.  
  68.     for(i = 0; i < 2; ++i)
  69.     {
  70.         for(j = 0; j < 2; ++j)
  71.         {
  72.             mat.v[i][j] = 1;
  73.         }
  74.     }
  75.  
  76.     mat.v[1][1] = 0;
  77.  
  78.     while(scanf("%lld%lld",&n,&power_of_two)==2)
  79.     {
  80.         if(n == 0 || n == 1)
  81.         {
  82.             printf("%d\n", n);
  83.         }
  84.         else
  85.         {
  86.             mod = pow(2,power_of_two);
  87.  
  88.             ans = power(n - 1);
  89.  
  90.             printf("%d\n", ans.v[0][0]);
  91.         }
  92.     }
  93.  
  94.     return 0;
  95. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement