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