= ext_gcd(m1, m2) # g == 1 じゃないとダメ (a1 + (a2 - a1) * m1 * g) % (m1 * m2) end 実装例 (C++) using i64 = int64_t; i64 crt(i64 a1, i64 a2, i64 m1, i64 m2) { auto xyg = ext_gcd(m1, m2); // xyg[2] == 1 じゃないとダメ auto ret = a1 + (a2 - a1) % m2 * m1 * xyg[0] % m2, m = m1 * m2; return (ret % m + m) % m; }