Calcule o inverso multiplicativo modular em Python
- Modular Multiplicativo Inverso Usando a Abordagem Ingênua Iterativa
-
Modular Multiplicativo Inverso Usando Função Integrada
pow()
Se tivermos dois números a
e m
, então o inverso multiplicativo modular de a
é x
no módulo m
se:
a * x % m = 1
Neste caso, o inverso multiplicativo existe apenas se a
e m
forem relativamente primos, ou seja, se o maior divisor comum de a
e m
for 1
.
O valor de x
pode variar de 1
a m-1
.
Modular Multiplicativo Inverso Usando a Abordagem Ingênua Iterativa
Suponha que precisamos encontrar o inverso multiplicativo de a
no módulo m
. Se o inverso do módulo multiplicativo existe, seu valor pode variar de 1
a m-1
. Portanto, iteramos por esse intervalo e verificamos a condição para o inverso do módulo multiplicativo. Se qualquer número dentro do intervalo satisfizer a condição, temos o número como módulo multiplicativo inverso.
def find_mod_inv(a, m):
for x in range(1, m):
if (a % m) * (x % m) % m == 1:
return x
raise Exception("The modular inverse does not exist.")
a = 13
m = 22
try:
res = find_mod_inv(a, m)
print("The required modular inverse is: " + str(res))
except:
print("The modular inverse does not exist.")
Produção:
The required modular inverse is: 17
Aqui, temos uma função chamada find_mod_inv
que leva a
e m
como entrada e retorna o inverso multiplicativo de a
no módulo m
.
Se o número a
não tiver um inverso multiplicativo de a
no módulo m
, ele aumentará e exceção.
No exemplo acima, podemos ver o inverso multiplicativo modular de 13
no módulo 22
é 17
.
Modular Multiplicativo Inverso Usando Função Integrada pow()
Também podemos usar a função integrada pow()
do Python para calcular o inverso multiplicativo modular de um número.
a = 38
m = 97
res = pow(a, m - 2, m)
print("The required modular inverse is: " + str(res))
Produção:
The required modular inverse is: 23
Para calcular o módulo multiplicativo inverso usando o método pow()
, o primeiro parâmetro para o método pow()
será o número cujo módulo inverso deve ser encontrado, o segundo parâmetro será a ordem do módulo subtraído por 2
e o último parâmetro será a ordem do módulo.
No entanto, para Python 3.8
e superior, podemos substituir o segundo argumento por -1
.
a = 38
m = 97
res = pow(a, -1, m)
print("The required modular inverse is: " + str(res))
saída
The required modular inverse is: 23
Suraj Joshi is a backend software engineer at Matrice.ai.
LinkedIn