Advertisement
Guest User

Untitled

a guest
Sep 19th, 2019
115
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.20 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <string>
  4.  
  5. using namespace std;
  6. int otv, otv1, otv2, M;
  7.  
  8. int gcd(int a, int b, int& x, int& y, int n) {
  9. if (a == 0)
  10. {
  11. x = 0;
  12. y = 1;
  13. otv = b;
  14. return b; }
  15.  
  16. int x1, y1;
  17. int d = gcd(b % a, a, x1, y1, n);
  18. x = y1 -(b / a) * x1;
  19. y = x1;
  20.  
  21. if (n == 0)
  22. otv = d;
  23. if (n == 1)
  24. otv1 = x;
  25. if (n == 2)
  26. otv2 = y;
  27.  
  28. return d;
  29. }
  30.  
  31.  
  32. int teor(vector <int> a, vector <int> m)
  33. {
  34. int x, y;
  35. vector <int> c, d;
  36. int k = m.size();
  37. for (int i = 0; i < k; i++)
  38. c.push_back(M / m[i]);
  39.  
  40. for (int i = 0; i < k; i++)
  41. {
  42. if (c[i] >= m[i])
  43. {gcd(c[i], m[i], x, y, 1);
  44. d.push_back(otv1);
  45. }
  46. else
  47. {
  48. gcd(m[i], c[i], x, y, 2);
  49. d.push_back(otv2); } }
  50.  
  51. int resh = 0;
  52. for (int i = 0; i < k; i++)
  53. {resh += (c[i] * d[i] * a[i]);
  54. resh %= M;
  55.  
  56. }
  57.  
  58. return resh;
  59. }
  60.  
  61. int main()
  62. { string ast, mst;
  63. cin >> ast >> mst;
  64. int x, y;
  65. vector <int> a, m;
  66. vector<string> arr;
  67.  
  68.  
  69. string delim(",");
  70. int prev = 0, next, delta = delim.length();
  71.  
  72. while ((next = ast.find(delim, prev)) != string::npos) {
  73. string tmp = ast.substr(prev, next - prev);
  74. arr.push_back(ast.substr(prev, next - prev));
  75.  
  76. prev = next + delta;
  77. }
  78. string tmp = ast.substr(prev);
  79. arr.push_back(ast.substr(prev));
  80.  
  81. for (int i = arr.size() - 1; i >= 0; i--)
  82. a.push_back(atoi(arr[i].substr(0, arr[i].size()).c_str()));
  83.  
  84. vector<string> mrr;
  85. int prev1 = 0, next1, delta1 = delim.length();
  86.  
  87. while ((next1 = mst.find(delim, prev1)) != string::npos) {
  88. string tmp1 = mst.substr(prev1, next1 - prev1);
  89. mrr.push_back(mst.substr(prev1, next1 - prev1));
  90.  
  91. prev1 = next1 + delta1;
  92. }
  93. string tmp1 = mst.substr(prev1);
  94. mrr.push_back(mst.substr(prev1));
  95.  
  96. for (int i = mrr.size() - 1; i >= 0; i--)
  97. m.push_back(atoi(mrr[i].substr(0, mrr[i].size()).c_str()));
  98.  
  99. M = 1;
  100. for (int i = 0; i < m.size(); i++)
  101. M *= m[i];
  102.  
  103. for (int i = 0; i < m.size(); i++)
  104. for (int j = i + 1; j < m.size(); j++)
  105. {gcd(m[i], m[j], x, y, 0);
  106. if (otv != 1)
  107. {
  108. cout << "Oshibka" << endl;
  109. return 0;
  110. }
  111. }
  112.  
  113. int resh;
  114. resh = teor(a, m);
  115. while (resh < 0)
  116. resh += M;
  117. cout << resh << endl;
  118. system("pause");
  119. return 0;
  120. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement