# input: x = ai mod m_i, mi>0, i=1,2 # output: x = a mod m defcrt2(a1,m1,a2,m2): [d,t1,t2] = exgcd(m1,m2) a,m = a2-a1,m1//d*m2 if(a%d): raise ValueError('No solution to crt problem') return [(a1+a//d*t1*m1)%m,m]
# input: x = ai mod m_i, mi>0 # output: x = a mod m defcrt(a,m): n = len(a) if(len(m)!=n): raise ValueError('a and m must have equal length') aa,mm = a[0],m[0] for i in range(1,n): [aa,mm] = crt2(aa,mm,a[i],m[i]) return [aa,mm]
if __name__ == "__main__": [a,m]=crt([2,-4,5],[3,5,12]) print(a,m) [a,m]=crt([2,-4,4],[3,5,12]) print(a,m)