python实现中国剩余定理(CRT)

话不多说,上代码

def CRT(Congruence_equations):
#x传入一个列表,keys代表着模数,items代表余数
        def     gcd(a,b):     #求解最大公约数
                while a!=0:
                    a,b = b%a,a  
                return 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
         for p in Congruence_equations.keys():
         		M=Congruence_equations[p]*M
       
        x=0
        for p in Congruence_equations.keys():
                x+=findModReverse(M//p,p)*Congruence_equations[p]*M/p  #CRT
        return int(x%M)    #返回同余方程组的解
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值