The Chinese Remainder Theorem
def crt(a, n):
assert len(a) == len(n), "len(a) != len(n)"
N = reduce((lambda x, y: x * y), n)
x = 0
for j in range(len(n)):
N_j = N / n[j]
s_j = xgcd(N_j, n[j])[1]
x = (x + a[j] * s_j * N_j) % N
return xCRT_list([4,1,3,0], [7,3,5,11])Last updated