2012-04-12 18 views
20

Oltre 3 anni dopo aver posto la domanda ho trovato la soluzione. L'ho incluso come risposta.Operatore inverso modulo

Ho un'espressione con modulo che deve essere inserita in termini di x.

(a + x) m mod = b

io non riesco a capire cosa fare con il modulo. C'è un modo per ottenere x da solo, o sono sfortunato su questo?

Modifica: Mi rendo conto che posso ottenere più risposte, ma sto cercando una risposta che rientri nel raggio di m.

+0

Si può provare a utilizzare il teorema del resto cinese. Controlla questo [video] (https://www.youtube.com/watch?v=Y5RcMWiUyyE). – Leonidas

risposta

15

stavo rivisita questo argomento e ho capito che è possibile in base al largo della risposta @Gorcha ha dato.

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

Non so perché non ho capito prima, ma la soluzione può essere derivato impostando n 0.

appare allora la risposta alla mia domanda di essere x = b - a, anche se nel esempio (26 + x) mod 29 = 3 il risultato è -23, che è inferiore a m. Per ottenere -23 indietro nel range previsto mod con 29, che dà 6. Mentre non specificato nella domanda questo dà un valore tra 0 e m.

La soluzione finale diventa allora: x = (b - a) mod m

OSSIA

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

che mette x nel range da 0 a m. Il controllo mostrerà (26 + 6) mod 29 = 3.

+2

Tecnicamente non è necessario impostare n a 0. Qualsiasi n sembra funzionare. OSSIA x = (nm + b - a) mod m darà la risposta corretta di x per ogni intero n. –

+1

Che dire di '26x mod 29 = 3'? –

+1

In che modo aiuta a risolvere x nell'intervallo da 0 a m? –

3

sì. sei fregato.

esempio:

5 mod 3 = 2 
8 mod 3 = 2 

in modo inverso mod 2 è quello che? 8 o 5? o 11? o un'infinità di altri numeri?

La mod inversa è una relazione, si inizia a ottenere matematica più complicata se si tenta di perseguire questo. Se sei in haskell potresti tranquillamente modellarlo con il non-determinismo (una lista infinita di possibili risposte)

Inoltre, questa non è davvero una domanda di programmazione. controlla lo scambio di matematica.

+0

Haha, hai appena visto la tua modifica. alla fine penso che hai buttato via troppe informazioni applicando il modulo. È un po 'un orizzonte degli eventi – TheIronKnuckle

+0

Giusto, speravo che qualcuno più intelligente di me avesse una soluzione conveniente, ma ero quasi arrivato a questa conclusione da solo. Per quanto riguarda lo scambio di matematica, non sapevo che esistesse fino ad oggi! –

1

La parte difficile di questa equazione è che anche se conosci a, m eb, non riesci a capire in modo definitivo x.

Ad esempio, dire l'equazione era:

(2 + x) % 4 = 3 

x potrebbe essere 1, 5, 9, 13 ecc

Ciò significa che sono fuori di fortuna, non c'è modo di ottenere x da solo.

+0

Tranne che sto cercando un valore nell'intervallo di m, quindi sarebbe solo 1, poiché 5, 9 e 13 sono tutti al di fuori dell'intervallo che sto cercando. –

10

Non è possibile determinare in modo definitivo x, ma possiamo ottenere un po 'di più data la definizione dell'operatore.

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

Quindi nel tuo caso:

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

ho questa equazione per invertire il modulo se abbiamo

(var1 +var2) mod num=Res 

poi per ottenere

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

esempio 25+5mod26=4

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