Advertisement
Guest User

mur

a guest
Feb 23rd, 2017
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.68 KB | None | 0 0
  1. #include <cstdio>
  2. #define mod 1000000007
  3. using namespace std;
  4.  
  5. typedef long long ll;
  6.  
  7. struct Matrix
  8. {
  9.     ll a; ll b;
  10.     ll c; ll d;
  11. };
  12.  
  13. ll n;
  14.  
  15. Matrix mnoz(Matrix A, Matrix B)
  16. {
  17.     Matrix W;
  18.     W.a = (A.a * B.a + A.b * B.c) % mod;
  19.     W.b = (A.a * B.b + A.b * B.d) % mod;
  20.     W.c = (A.c * B.a + A.d * B.c) % mod;
  21.     W.d = (A.c * B.b + A.d * B.d) % mod;
  22.     return W;
  23. }
  24.  
  25. Matrix pot(Matrix A, ll n)
  26. {
  27.     Matrix W = A;
  28.     while(n > 0)
  29.     {
  30.         if(n % 2) W = mnoz(W, A);
  31.    
  32.         A = mnoz(A, A);
  33.         n >>= 1;
  34.     }
  35.     return W;
  36.        
  37.        
  38. }
  39.  
  40. Matrix A, W;
  41.  
  42. int main()
  43. {
  44.     scanf("%lld", &n);
  45.    
  46.     A.a = 0;
  47.     A.b = 1;
  48.     A.c = 1;
  49.     A.d = 1;
  50.    
  51.     W = pot(A, n);
  52.     printf("%lld", W.b);
  53.     return 0;
  54.      
  55.    
  56.    
  57. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement