某日因做离散作业需要计算 Z p Z_{p} Zp中元素的逆,还需要求解中国剩余定理的问题,所以直接写了个Python程序,写成博客留作纪念。
求解中国剩余定理
a=input("请输入序列a:").split(" ")
m=input("请输入序列m:").split(" ")
M=1
x=0
for mi in m:
M*=eval(mi)
def return_inverse(a,b):
x, y=a, b
sa, ta=1, 0
sb, tb=0, 1
while y !=0:
r=x%y
if r==0:
break
q=x//y
s1=sa-q*sb
t1=ta-q*tb
x, y=y, r
sa,ta=sb, tb
sb,tb=s1,t1
return sb
for i in range(0,len(a)):
x+=eval(a[i])*(M/eval(m[i]))*return_inverse(M/eval(m[i]), eval(m[i]))
print("x={}".format(x))`
求 Z p Z_{p} Zp中元素的逆(利用欧几里得算法)
a, b=input("请输入两个互质的数:").split(" ")
a=eval(a)
b=eval(b)
x, y=a, b
sa, ta=1, 0
sb, tb=0, 1
while y !=0:
r=x%y
if r==0:
break
q=x//y
s1=sa-q*sb
t1=ta-q*tb
print("&{}={}*{}+{}\\\\".format(x,y,q,r))
print("&{}={}*{}+{}*{}\\\\".format(r,s1,a,t1,b))
x, y=y, r
sa,ta=sb, tb
sb,tb=s1,t1
输出的片段可以直接粘贴到latex的align*环境中。