#gcd,求最大公约数函数,递归算法,有了扩展欧几里得算法之后,此函数可以不用
def _g_c_d(a,b):
if 0==b:
return a
return gcd(b,a%b)
#扩展欧几里得算法,返回值列表中,x是a的逆元(mod b),q是gcd(a,b),若x是0,则表示没有逆元
#y是计算过程中的迭代的参数,可以不用管
#此算法实质上是广义欧几里得除法的逆运算,用递归可以体现出这个逆运算的过程
def Ex_Euclid(a,b):
if 0==b:
x=1;y=0;q=a
return x,y,q
xyq=Ex_Euclid(b,a%b)
x=xyq[0];y=xyq[1];q=xyq[2]
temp=x;x=y;y=temp-a//b*y
return x,y,q
#获取a的逆元(mod b)的函数,目的是为了封装获取逆元的功能
def Get_Inverse(a,b):
return Ex_Euclid(a,b)[0]
#获取a和b的最大公约数函数,目的是为了封装获取最大公约数的功能
def gcd(a,b):
return Ex_Euclid(a,b)[2]
#判断所有的mi是否两两互质
def Is_Coprime(m_list):
for i in range(len(m_list)):
for j in range(i+1,len(m_list)):
if 1!=gcd(m_list[i],m_list[j]):
return 0 #返回0表示不是两两互质的
return 1 #返回1表示是两两互质的
#获取所有的Mi
def Get_Mi(m_list,M):
Mi_list=[]
for mi in m_list:
Mi_list.append(M//mi)
return Mi_list
#获取所有的Mi的逆元
def Ge
中国剩余定理 Python实现
最新推荐文章于 2022-12-30 21:52:59 发布