chinese_remainder.py

chinese_remainder.py

from sage.all import *

# Chinese Remainder Theorem, you can also use the function crt() in sage
def crt(a_list, m_list):
    M = 1
    for m in m_list:
        M *= m
    x = 0
    for a, m in zip(a_list, m_list):
        M_i = M // m
        M_i_inv = inverse_mod(M_i, m)
        x += a * M_i * M_i_inv
    return x % M