Поиск x
в основном ищет обратный элемент e
мод k
, который может быть сделан Extended Euclidean Algorithm, которые хорошо реализован и используются для modular inverse here:
# Iterative Algorithm (xgcd)
def iterative_egcd(a, b):
x,y, u,v = 0,1, 1,0
while a != 0:
q,r = b//a,b%a; m,n = x-u*q,y-v*q # use x//y for floor "floor division"
b,a, x,y, u,v = a,r, u,v, m,n
return b, x, y
def modinv(a, m):
g, x, y = iterative_egcd(a, m)
if g != 1:
return None
else:
return x % m
Примечания: Я не являюсь владельцем кода
И использование:
>>> e = 3
>>> k = 7
>>> x = modinv(e,k)
>>> x
5
>>> e*x % k
1
'(x * e) mod K = 1' или' x * (e mod k) = 1'? – DhruvPathak
Извините (x * e) mod k = 1 – Scalahansolo
Правильно ли я говорю о модульной арифметике, а не просто о '' '' функции? – Vyktor