Advertisement
Guest User

Untitled

a guest
Nov 21st, 2019
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.11 KB | None | 0 0
  1. #include <vector>
  2. #include <iostream>
  3. using namespace std;
  4.  
  5. typedef long long ll;
  6. typedef vector<vector<ll> > matrix;
  7. const ll MOD = 1000000007;
  8. const int K = 2;
  9.  
  10. matrix mul(matrix A, matrix B)
  11. {
  12. matrix C(K+1, vector<ll>(K+1));
  13. for (int i = 1; i <= K; i++)
  14. for (int j = 1; j <= K; j++)
  15. for (int k = 1; k <= K; k++)
  16. C[i][j] = (C[i][j] + A[i][k] * B[k][j]) % MOD;
  17. return C;
  18. }
  19. matrix pow(matrix A, int p)
  20. {
  21. if (p == 1)
  22. return A;
  23. if (p % 2)
  24. return mul(A, pow(A, p-1));
  25. matrix X = pow(A, p/2);
  26. return mul(X, X);
  27. }
  28.  
  29. int fib(int n)
  30. {
  31.  
  32. vector<ll> F1(K+1);
  33. F1[1] = 1;
  34. F1[2] = 1;
  35.  
  36.  
  37. matrix T(K+1, vector<ll>(K+1));
  38. T[1][1] = 0, T[1][2] = 1;
  39. T[2][1] = 1, T[2][2] = 1;
  40.  
  41. if (n == 1)
  42. return 1;
  43. T = pow(T, n-1);
  44. ll wynik = 0;
  45. for (int i = 1; i <= K; i++)
  46. wynik = (wynik + T[1][i] * F1[i]) % MOD;
  47. return wynik;
  48.  
  49. }
  50. int main() {
  51. int a, n = 0;
  52.  
  53. cin >> a;
  54. if(a<100){
  55. for(int i=0; i<a; i++)
  56. while (cin >> n){
  57. cout<< fib(n)<< endl;
  58. }
  59. }
  60. else return 0;
  61. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement