Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- bool Crt (vector <ll>& Rems, vector <ll>& Mods, ll& x) {
- ll r1 = x = Rems[0], m1 = Mods[0], n = Rems.size();
- for (int i = 1; i < n; i++) {
- ll r2 = Rems[i], m2 = Mods[i];
- ll c = r2 - r1, g = gcd (m1, m2), p, q, l = lcm (m1, m2);
- if (Flex (r1, g) != Flex (r2, g))
- return false;
- g = DoExtendedGCD (m1, -m2, p, q);
- ll X = mul (Flex (p, l), Flex (c / g, l), l);
- X = Flex (X, l);
- x = r1 + mul (X, m1, l);
- x = Flex (x, l);
- r1 = x, m1 = l;
- }
- return true;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement