栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Python:CRT中国剩余定理的简单实现

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Python:CRT中国剩余定理的简单实现

简单实现中国剩余定理,仅适用于模数两两互素的情形,否则跳出

m序列和a序列均采用逐个输入的方式

以字母q作为每个序列最后一个元素作为结束符号

import math

def modinv(M,m):
    x1,x2,x3=1,0,M
    y1,y2,y3=0,1,m
    while y3!=0:
        q=x3//y3
        t1,t2,t3=x1-q*y1,x2-q*y2,x3-q*y3
        x1,x2,x3=y1,y2,y3
        y1,y2,y3=t1,t2,t3
    return x1%m

endstr='q'
mstr=''
i=1
print('m'+str(i)+'=',end='')
for line in iter(input,endstr):
    mstr+=line+' '
    i+=1
    print('m'+str(i)+'=',end='')
mlist=mstr.split(" ")
del mlist[-1]
mlist=[int(mlist[i]) for i in range(len(mlist))]

for i in range(len(mlist)-1):
    j=i+1
    while j 
序列的输入采用以单个回车作为分隔的方式(适用于ctrl+c 
import math

def modinv(M,m):
    x1,x2,x3=1,0,M
    y1,y2,y3=0,1,m
    while y3!=0:
        q=x3//y3
        t1,t2,t3=x1-q*y1,x2-q*y2,x3-q*y3
        x1,x2,x3=y1,y2,y3
        y1,y2,y3=t1,t2,t3
    return x1%m

mstr=input('m:')
mlist=mstr.splitlines()
mlist=[int(mlist[i]) for i in range(len(mlist))]

for i in range(len(mlist)-1):
    j=i+1
    while j 

以上两种方式主要区别在于输入的方法,其他部分无差,算法的实现重点在于实现大整数的模逆运算和理解扩展欧几里得算法

(总不能一个个试数字直到满足条件吧

也可以尝试更方便快捷的文件输入方式

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/341820.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号