23/01/15 11:08
systrap
Salve, devo calcolare l'inverso moltiplicativo di F modulo H. Per verificare il risultato corretto uso "(F^-1)*(F) mod H" dove mi aspetto come risultato 1. Ecco un esempio di F e di H:
F:
328706977091914224451184156313209395172271077207317203412960537434506723896422227296184432479570674382948691348164
197834743939199004903333623588303052837737785375046904508
H: 206177241270426463297170516123192969338908152987550203378638225761304993437815507934017795395774148032586210898477
071869956709929256790283198654751917594383583778013629011760571554493187849075545075855761401617401748544176552117
5
Ora per verificare l'esistenza dell'inverso moltiplicativo di F devo controllare che l'mcd(H, F) sia 1 per cui usando:
effettivamente mcd(H, F) viene 1.
Ora posso calcolare l'inverso moltiplicativo di F:
Ho come risultato "inverso_F":
6272371919041269490801350467333545851683796097523842378994
A questo punto controllo che (F^-1)*F mod H mi dia come risultato 1:
Dove "risultato":
328706977091914224451184156313209395172271077207317203411145650947554439831469652893949161704814753056230884716316
088928438601322806807186385313180938357638772364497583777
Invece risultato doveva essere 1.
Se la mia matematica non è scorretta, credo che il problema stia nella divisione tra numeri molto grandi. Come faccio a dividere due numeri grandi in python?
Grazie
F:
328706977091914224451184156313209395172271077207317203412960537434506723896422227296184432479570674382948691348164
197834743939199004903333623588303052837737785375046904508
H: 206177241270426463297170516123192969338908152987550203378638225761304993437815507934017795395774148032586210898477
071869956709929256790283198654751917594383583778013629011760571554493187849075545075855761401617401748544176552117
5
Ora per verificare l'esistenza dell'inverso moltiplicativo di F devo controllare che l'mcd(H, F) sia 1 per cui usando:
def mcd(a, b): while b: a, b = b, a%b return a
effettivamente mcd(H, F) viene 1.
Ora posso calcolare l'inverso moltiplicativo di F:
inverso_F= ((H/F)+1)
Ho come risultato "inverso_F":
6272371919041269490801350467333545851683796097523842378994
A questo punto controllo che (F^-1)*F mod H mi dia come risultato 1:
risultato = (inverso_F*F)%H
Dove "risultato":
328706977091914224451184156313209395172271077207317203411145650947554439831469652893949161704814753056230884716316
088928438601322806807186385313180938357638772364497583777
Invece risultato doveva essere 1.
Se la mia matematica non è scorretta, credo che il problema stia nella divisione tra numeri molto grandi. Come faccio a dividere due numeri grandi in python?
Grazie
Ultima modifica effettuata da systrap 23/01/15 11:10
aaa