引例:求解同余方程组

python 实现
def modExp(a, exp, mod):
fx = 1
while exp > 0:
if (exp & 1) == 1:
fx = ((fx * a) % mod)
a = (a * a) % mod
exp = exp >> 1
return fx
def gcd(a,b):
while a!=0:
a,b = b%a,a
return b
#定义一个函数,参数分别为a,n,返回值为b
def findModReverse(a,m):#这个扩展欧几里得算法求模逆
if gcd(a,m)!=1:
return None
u1,u2,u3 = 1,0,a
v1,v2,v3 = 0,1,m
while v3!=0:
q = u3//v3
v1,v2,v3,u1,u2,u3 = (u1-q*v1),(u2-q*v2),(u3-q*v3),v1,v2,v3
return u1%m
import numpy as np
count=input('input the count: ')
m=[]
a=[]
M=[]
y=[]
MT=1
for i in range(0,int(count)):
m.append(int(input('input m('+str(i)+'):')))
a.append(int(input('input a('+str(i)+'):')))
M.append(1)
y.append(0)
#print(m[i])
t=0
for i in range(0,int(count)):
for j in range(0,int(count)):
if(i!=j):
M[i]=M[i]*m[j]
y[i]=findModReverse(M[i],m[i])
#print(M[i],' ',m[i],' ',y[i])
for i in range(0,int(count)):
#print(a[i],' ',M[i],' ',y[i])
t=t+a[i]*M[i]*y[i]
#print(t)
MT=MT*m[i]
#print(t)
t=t%MT
#print(MT)
print('ANS:',t)
## 求解过程
# input the count: 3 --> 方程组维数
# input m(0):25 --> x = 12 mod (25)
# input a(0):12
# input m(1):26 --> x = 9 mod (26)
# input a(1):9
# input m(2):27 --> x = 23 mod (27)
# input a(2):23
# ANS: 14387