efrei/algebre-non-lineaire/inverse.py

33 lines
730 B
Python
Raw Normal View History

2022-01-24 09:46:18 +01:00
#!/usr/bin/env python3
"""Algorithme de calcul de l'inverse d'un ensemble
Utilise les coefficients de Bezout donnés par l'algorithme d'Euclide étendu.
"""
import sys
import euclide_etendu
2022-01-24 17:56:46 +01:00
def main():
2022-01-24 09:46:18 +01:00
if len(sys.argv) == 3:
a = int(sys.argv[1])
n = int(sys.argv[2])
else:
a = int(input("a : "))
n = int(input("n : "))
2022-01-24 17:56:46 +01:00
# On veut associer le coefficient de Bezout u à a, donc l'ordre des paramètres
# est important :
pgcd, u = euclide_etendu.calculate(a, n)
if pgcd != 1:
print(f"{a} est non inversible dans Z/{n}Z")
else:
inverse = (u + n) % n
print(f"L'inverse de {a} dans Z/{n}Z est {inverse}")
if __name__ == "__main__":
main()