Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- #include <string>
- using namespace std;
- int otv, otv1, otv2, M;
- int gcd(int a, int b, int& x, int& y, int n) {
- if (a == 0)
- {
- x = 0;
- y = 1;
- otv = b;
- return b; }
- int x1, y1;
- int d = gcd(b % a, a, x1, y1, n);
- x = y1 -(b / a) * x1;
- y = x1;
- if (n == 0)
- otv = d;
- if (n == 1)
- otv1 = x;
- if (n == 2)
- otv2 = y;
- return d;
- }
- int teor(vector <int> a, vector <int> m)
- {
- int x, y;
- vector <int> c, d;
- int k = m.size();
- for (int i = 0; i < k; i++)
- c.push_back(M / m[i]);
- for (int i = 0; i < k; i++)
- {
- if (c[i] >= m[i])
- {gcd(c[i], m[i], x, y, 1);
- d.push_back(otv1);
- }
- else
- {
- gcd(m[i], c[i], x, y, 2);
- d.push_back(otv2); } }
- int resh = 0;
- for (int i = 0; i < k; i++)
- {resh += (c[i] * d[i] * a[i]);
- resh %= M;
- }
- return resh;
- }
- int main()
- { string ast, mst;
- cin >> ast >> mst;
- int x, y;
- vector <int> a, m;
- vector<string> arr;
- string delim(",");
- int prev = 0, next, delta = delim.length();
- while ((next = ast.find(delim, prev)) != string::npos) {
- string tmp = ast.substr(prev, next - prev);
- arr.push_back(ast.substr(prev, next - prev));
- prev = next + delta;
- }
- string tmp = ast.substr(prev);
- arr.push_back(ast.substr(prev));
- for (int i = arr.size() - 1; i >= 0; i--)
- a.push_back(atoi(arr[i].substr(0, arr[i].size()).c_str()));
- vector<string> mrr;
- int prev1 = 0, next1, delta1 = delim.length();
- while ((next1 = mst.find(delim, prev1)) != string::npos) {
- string tmp1 = mst.substr(prev1, next1 - prev1);
- mrr.push_back(mst.substr(prev1, next1 - prev1));
- prev1 = next1 + delta1;
- }
- string tmp1 = mst.substr(prev1);
- mrr.push_back(mst.substr(prev1));
- for (int i = mrr.size() - 1; i >= 0; i--)
- m.push_back(atoi(mrr[i].substr(0, mrr[i].size()).c_str()));
- M = 1;
- for (int i = 0; i < m.size(); i++)
- M *= m[i];
- for (int i = 0; i < m.size(); i++)
- for (int j = i + 1; j < m.size(); j++)
- {gcd(m[i], m[j], x, y, 0);
- if (otv != 1)
- {
- cout << "Oshibka" << endl;
- return 0;
- }
- }
- int resh;
- resh = teor(a, m);
- while (resh < 0)
- resh += M;
- cout << resh << endl;
- system("pause");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement