5.6 求解同余方程组 -python实现


引例:求解同余方程组

  • 例题

  • 答案: 14387

python 实现

def modExp(a, exp, mod):
    fx = 1
    while exp > 0:
        if (exp & 1) == 1:
            fx = ((fx * a) % mod)
        a = (a * a) % mod
        exp = exp >> 1
    return fx

def     gcd(a,b):
        while a!=0:
            a,b = b%a,a
        return b
#定义一个函数,参数分别为a,n,返回值为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
    
import numpy as np
count=input('input the count: ')
m=[]
a=[]
M=[]
y=[]
MT=1
for i in range(0,int(count)):
    m.append(int(input('input m('+str(i)+'):')))
    a.append(int(input('input a('+str(i)+'):')))
    M.append(1)
    y.append(0)
    #print(m[i])
t=0
for i in range(0,int(count)):
    for j in range(0,int(count)):
        if(i!=j):
            M[i]=M[i]*m[j]
    y[i]=findModReverse(M[i],m[i])
    #print(M[i],' ',m[i],' ',y[i])

for i in range(0,int(count)):
    #print(a[i],' ',M[i],' ',y[i])
    t=t+a[i]*M[i]*y[i]
    #print(t)
    MT=MT*m[i]

#print(t)
t=t%MT
#print(MT)
print('ANS:',t)



## 求解过程
# input the count: 3  --> 方程组维数
# input m(0):25  --> x = 12 mod (25)
# input a(0):12

# input m(1):26  --> x = 9 mod (26)
# input a(1):9

# input m(2):27  --> x = 23 mod (27)
# input a(2):23
# ANS: 14387


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM