求逆元
inv=inverse_mod(30,1373)
print(30*inv%1373) #1
扩展欧几里得算法
d,u,v=xgcd(20,30)
print("d:{0} u:{1} v:{2}".format(d,u,v))#d:10 u:-1 v:1
孙子定理(中国剩余定理)
计算参考:
https://blog.csdn.net/destiny1507/article/details/81751168
def chinese_remainder(modulus, remainders):
Sum = 0
prod = reduce(lambda a, b: a*b, modulus)
for m_i, r_i in zip(modulus, remainders):
p = prod // m_i
Sum += r_i * (inverse_mod(p,m_i)*p)
return Sum % prod
chinese_remainder([3,5,7],[2,3,2]) #23
求离散对数
2 x ≡ 13 m o d 23 2^x \equiv13 \mod23 2x≡13