中国剩余定理

算法部分参考:
https://blog.csdn.net/u010468553/article/details/38346195

# -*- coding: UTF-8 -*-
from functools import reduce
def Get_Mi(m_list,M):
    M_list=[]
    for mi in m_list:
        M_list.append(M//mi)
    return M_list

def Get_ei_list(M_list,m_list):
    ei_list=[]
    for i in range(len(M_list)):
        ei_list.append(Get_ei(M_list[i],m_list[i]))#这里就原来有改动,来是数组
    return ei_list
   
def Get_ei(a,b):
	# 计算ei
    #        请在此处添加代码       #
    # *************begin************#
    i=1
    while True:
        if (a*i)%b ==1:
            return i
        i+=1

    # **************end*************# 

def crt(a_list,m_list):
	# 计算中国剩余定理,返回计算结果
    #        请在此处添加代码       #
    # *************begin************#
    M = reduce(lambda x, y: x*y,m_list) 
    Mi = Get_Mi(m_list,M)
    ei = Get_ei_list(Mi,m_list)
    '''
    result = map(lambda x,y,z:x*y*z,Mi,ei,a_list)
    没试过不知道行不行
    '''
    sums=0
    for x,y,z in zip(ei,Mi,a_list):
         sums += (x*y*z) #233
    #求解
    return sums%M
    # **************end*************#
  
    
if __name__=='__main__':
    a_list= list(map(int,input().split(",")))
    m_list= list(map(int,input().split(",")))
    print(crt(a_list,m_list))    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值