Advertisement
Guest User

Untitled

a guest
Jun 21st, 2018
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.39 KB | None | 0 0
  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include <iostream>
  3. #include <string>
  4. #include <cmath>
  5. #include <algorithm>
  6. #include <vector>
  7. #include <set>
  8. #include <iomanip>
  9. #include <list>
  10. #include <sstream>
  11. #include <ctime>
  12. #include <functional>
  13. #include <fstream>
  14. #include <map>
  15. #include <numeric>
  16. #include <cassert>
  17. #include <queue>
  18. #include <tuple>
  19. #include <regex>
  20. #include <array>
  21. #include <unordered_map>
  22. #include <bitset>
  23. #include <deque>
  24. #include <complex>
  25. #include <stack>
  26. #include <random>
  27. #include <chrono>
  28.  
  29.  
  30. using namespace std;
  31. typedef long long ll;
  32. typedef long double ld;
  33. int const INF = numeric_limits<int>::max();
  34. ll const LLINF = numeric_limits<ll>::max();
  35. #define int ll
  36. //#define endl '\n'
  37. vector<int> mult(const vector<int> & a, const vector<int> & b, int m)
  38. {
  39. vector<int> c(4);
  40.  
  41. c[0] = (a[0] * b[0] + a[1] * b[2]) % m;
  42. c[1] = (a[0] * b[1] + a[1] * b[3]) % m;
  43. c[2] = (a[2] * b[0] + a[3] * b[2]) % m;
  44. c[3] = (a[2] * b[1] + a[3] * b[3]) % m;
  45. return c;
  46. }
  47.  
  48. vector<int> bpow(vector<int> a, int p, int m)
  49. {
  50. vector<int> res = { 1, 0, 0, 1 };
  51. while (p)
  52. {
  53. if (p & 1)
  54. {
  55. res = mult(res, a, m);
  56. p--;
  57. }
  58. else
  59. {
  60. a = mult(a, a, m);
  61. p >>= 1;
  62. }
  63. }
  64. return res;
  65. }
  66.  
  67.  
  68.  
  69. signed main() {
  70. ios::sync_with_stdio(false);
  71.  
  72.  
  73. int n, m;
  74.  
  75. cin >> n >> m;
  76. auto a = bpow({ 0, 1, 1, 1}, n, m);
  77. cout << a[2] % m << endl;
  78.  
  79. return 0;
  80. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement