web-dev-qa-db-fra.com

Opérateur de module inverse

Plus de 3 ans après avoir posé la question, j'ai trouvé la solution. Je l'ai inclus comme réponse .

J'ai une expression avec module qui doit être mise en termes de x.

(a + x) mod m = b

Je ne sais pas quoi faire avec le module. Existe-t-il un moyen d'obtenir x par lui-même, ou suis-je malchanceux sur celui-ci?

Edit : Je me rends compte que je peux obtenir plusieurs réponses, mais je recherche une réponse qui se situe dans la plage de m.

29
Michael Hogenson

Je revoyais cette question et j'ai réalisé que c'était possible en fonction de la réponse donnée par @Gorcha.

(a + x) mod m = b  
a + x = nm + b  
x = nm + b - a for some integer n

Je ne sais pas pourquoi je ne l'ai pas réalisé auparavant, mais la solution peut être dérivée en définissant n à 0.

La réponse à ma question semble alors être x = b - a, Bien que dans l'exemple (26 + x) mod 29 = 3 Le résultat soit -23, ce qui est inférieur à m. Pour obtenir -23 dans la plage attendue, modifiez-le avec 29, ce qui donne 6. Bien que cela ne soit pas spécifié dans la question, cela donne une valeur entre 0 et m.

La solution finale devient alors: x = (b - a) mod m

C'EST À DIRE.

(26 + x) mod 29 = 3
x = (3 - 26) mod 29
x = -23 mod 29
x = 6

Ce qui place x dans la plage de 0 à m. La vérification affichera (26 + 6) mod 29 = 3.

20
Michael Hogenson

Vous ne pouvez pas déterminer définitivement x, mais nous pouvons aller un peu plus loin compte tenu de la définition de l'opérateur.

x mod y = z if x = ny + z for some integer n, where 0 <= z < y

Donc dans votre cas:

(a + x) mod m = b
a + x = nm + b
x = nm + b - a for some integer n
11
Gorcha

oui. t'es foutu.

exemple:

5 mod 3 = 2
8 mod 3 = 2

donc le mod inverse 2 est quoi? 8 ou 5? ou 11? ou une infinité d'autres nombres?

Le mod inverse est une relation, vous commencez à obtenir des mathématiques plus délicates si vous essayez de poursuivre. Si vous êtes dans haskell, vous pouvez facilement le modéliser avec du non-déterminisme (une liste infinie de réponses possibles)

De plus, ce n'est pas vraiment une question de programmation. consultez l'échange de mathématiques.

4
TheIronKnuckle

J'ai cette équation pour inverser le module si nous avons

(var1 +var2) mod num=Res

puis pour obtenir

var1= num-((Res-var2)*-1)

par exemple. 25+5mod26=4

var1=26-((4-5)*-1)
var1=26-1
var1=5
1
Subhi Ayman

La partie délicate de cette équation est que même si vous connaissez a, m et b, vous ne pouvez pas déterminer de manière concluante x.

Par exemple, supposons que votre équation soit:

(2 + x) % 4 = 3

x pourrait être 1, 5, 9, 13 etc.

Cela signifie que vous n'avez pas de chance, il n'y a aucun moyen d'obtenir x par lui-même.

1
Andrew Clark