Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define _CRT_SECURE_NO_WARNINGS
- #include <iostream>
- #include <string>
- #include <cmath>
- #include <algorithm>
- #include <vector>
- #include <set>
- #include <iomanip>
- #include <list>
- #include <sstream>
- #include <ctime>
- #include <functional>
- #include <fstream>
- #include <map>
- #include <numeric>
- #include <cassert>
- #include <queue>
- #include <tuple>
- #include <regex>
- #include <array>
- #include <unordered_map>
- #include <bitset>
- #include <deque>
- #include <complex>
- #include <stack>
- #include <random>
- #include <chrono>
- using namespace std;
- typedef long long ll;
- typedef long double ld;
- int const INF = numeric_limits<int>::max();
- ll const LLINF = numeric_limits<ll>::max();
- #define int ll
- //#define endl '\n'
- vector<int> mult(const vector<int> & a, const vector<int> & b, int m)
- {
- vector<int> c(4);
- c[0] = (a[0] * b[0] + a[1] * b[2]) % m;
- c[1] = (a[0] * b[1] + a[1] * b[3]) % m;
- c[2] = (a[2] * b[0] + a[3] * b[2]) % m;
- c[3] = (a[2] * b[1] + a[3] * b[3]) % m;
- return c;
- }
- vector<int> bpow(vector<int> a, int p, int m)
- {
- vector<int> res = { 1, 0, 0, 1 };
- while (p)
- {
- if (p & 1)
- {
- res = mult(res, a, m);
- p--;
- }
- else
- {
- a = mult(a, a, m);
- p >>= 1;
- }
- }
- return res;
- }
- signed main() {
- ios::sync_with_stdio(false);
- int n, m;
- cin >> n >> m;
- auto a = bpow({ 0, 1, 1, 1}, n, m);
- cout << a[2] % m << endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement