Schrijf de functie inverse_fermat(a: int, n: int) -> int
die de inverse berekent van a
in \((\mathbb{Z}_{n} \setminus \{0\}, \cdot)\), zodat het gevolg van de kleine stelling van Fermat gebruikt wordt: “De inverse van \(a\) modulo \(p\) is gelijk aan \(a^{p - 2}\) modulo \(p\) als \(p\) een priemgetal is.” Hergebruik hierbij de functie macht
die eerder geïmplementeerd werd. Wanneer n
geen priemgetal is, wordt -1
teruggegeven. Merk op dat je niet op voorhand moet controleren of het getal n
een priemgetal is. Wat is een betere oplossing?
Voorbeelden:
>>> inverse_fermat(5, 17)
7
>>> inverse_fermat(4, 16)
-1
>>> inverse_fermat(10007, 100000007)
41071253