Guest User

Untitled

a guest
Jan 28th, 2020
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.11 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. #define ms(x, t) memset(x, t, sizeof(x))
  4. typedef long long int ll;
  5. typedef unsigned long long ull;
  6. typedef pair<ll, ll> pll;
  7. typedef pair<ll, pll> plll;
  8. typedef vector<int> vi;
  9. typedef vector<ll> vl;
  10. typedef vector<pll> vpll;
  11. typedef vector<plll> vplll;
  12. #define ff first
  13. #define ss second
  14. #define all(ar) ar.begin(), ar.end()
  15. #define rall(ar) ar.rbegin(), ar.rend()
  16. #define mp make_pair
  17. #define pb push_back
  18. #define pf push_front
  19. #define endl "\n"
  20. #define trace1(a) cerr << #a << ": " << a << endl;
  21. #define trace2(a, b) \
  22. cerr << #a << ": " << a << " | " << #b << ": " << b << endl;
  23. #define trace3(a, b, c) \
  24. cerr << #a << ": " << a << " | " << #b << ": " << b << " | " << #c << ": " \
  25. << c << endl;
  26.  
  27. const int limit = 1e5 + 1;
  28. const int inf = 1e7;
  29. const int mod = 1e9 + 7;
  30.  
  31. vector<vl> matI(int n) {
  32. vector<vl> I(n, vl(n, 0));
  33.  
  34. for (int i = 0; i < n; i++) {
  35. for (int j = 0; j < n; j++) {
  36. if (i == j)
  37. I[i][j] = 1;
  38. }
  39. }
  40. return I;
  41. }
  42.  
  43. vector<vl> matMul(vector<vl> &a, vector<vl> &b) {
  44. ll n = a.size();
  45. ll m = b[0].size();
  46. ll l = b.size();
  47. vector<vl> c(n, vl(m, 0));
  48.  
  49. for (int i = 0; i < n; i++) {
  50. for (int j = 0; j < m; j++) {
  51. for (int k = 0; k < l; k++) {
  52. c[i][j] = (c[i][j] + (a[i][k] % mod * b[k][j] % mod) % mod) % mod;
  53. }
  54. }
  55. }
  56.  
  57. return c;
  58. }
  59.  
  60. vector<vl> matExp(ll n, vector<vl> &a) {
  61. int m = a.size();
  62. vector<vl> ans = matI(m);
  63.  
  64. while (n) {
  65. if (n & 1) {
  66. ans = matMul(a, ans);
  67. }
  68. a = matMul(a, a);
  69. n = n >> 1;
  70. }
  71. return ans;
  72. }
  73.  
  74. int32_t main() {
  75. ios_base::sync_with_stdio(false);
  76. cin.tie(NULL);
  77. cout.tie(NULL);
  78. ll t;
  79. cin >> t;
  80. while (t--) {
  81. ll n, m;
  82. cin >> n >> m;
  83.  
  84. vector<vl> p = {{m - 1, m - 1}, {1, 0}};
  85. vector<vl> a = {{m}, {0}};
  86. vector<vl> e = matExp(n - 1, p);
  87. vector<vl> res = matMul(e, a);
  88. cout << (res[0][0] + res[1][0]) % mod << endl;
  89. }
  90.  
  91. return 0;
  92. }
Add Comment
Please, Sign In to add comment