史上最强大excrt板子
__int128 CRT(vector<pair<__int128, __int128>>& eq) {
return accumulate(eq.begin() + 1, eq.end(), eq[0],[](pair<__int128, __int128>& res, pair<__int128, __int128>& curr) {
__int128 r1 = res.first, m1 = res.second, r2 = curr.first, m2 = curr.second;
__int128 d = gcd(m1, m2);
__int128 m1d = m1 / d, m2d = m2 / d, l1, l2; exgcd(m1d, m2d, l1, l2);
__int128 lm = lcm(m1, m2), r = (r1 + (r2 - r1)/d * l1 * m1) % lm;
return make_pair(r < 0 ? r + lm : r, lm);
}).first;
}

浙公网安备 33010602011771号