Montgomeryn algoritmi

Kokeneet kirjoittajat eivät ole vielä tarkistaneet sivun nykyistä versiota, ja se voi poiketa merkittävästi 21. toukokuuta 2018 tarkistetusta versiosta . tarkastukset vaativat 5 muokkausta .

Montgomery-algoritmi  on tekniikka, jonka avulla voit nopeuttaa kerto- ja neliöintioperaatioita, joita tarvitaan nostettaessa lukua tehomoduuliin , kun moduuli on suuri (satojen bittien luokkaa). Sen ehdotti vuonna 1985 Peter Montgomery .

Montgomeryn algoritmi laskee kokonaisluvut a, b < n , r , GCD

Sovelluksissa se yleensä otetaan , koska tässä tapauksessa jako jäännösjäännöksellä ja kertominen algoritmin sisällä ovat nopeita.

Montgomeryn kertolasku

Määritellään luvun n -jäännös ( n -jäännös) muodossa .

Montgomeryn algoritmi käyttää ominaisuutta, että joukko on täydellinen jäännösjärjestelmä , eli se sisältää kaikki luvut 0 - n-1 .

MonPro laskee . Tuloksena on n-jäännös , koska

Määritellään n' niin että . ja voidaan laskea käyttämällä laajennettua euklidista algoritmia .

Toiminto

1. 2. 3. kun taas 4. palaa

Kun kertominen ja jako suoritetaan erittäin nopeasti, koska ne ovat vain bittisiirtoja, ja kun rivin 3 silmukka suoritetaan vain kerran. Siten Montgomeryn algoritmi on nopeampi kuin tavallinen laskenta , joka sisältää jakamisen n:llä. Kuitenkin n':n laskeminen ja lukujen muuntaminen n-jäännöksiksi ja päinvastoin ovat aikaa vieviä operaatioita, minkä seurauksena Montgomeryn algoritmin käyttäminen kahden luvun tuloa kerran laskettaessa vaikuttaa kohtuuttomalta.

Exponentiation by Montgomery

Montgomeryn algoritmin käyttäminen oikeuttaa itsensä nostettaessa lukua tehomoduuliin .

Toiminto

1. 2. 3. kun i=j-1 arvoon 0 jos sitten 4. paluu

Luvun nostaminen potenssiin, jonka bittipituus on k "neliö ja kerro" -algoritmilla, sisältää k - 2k kertolaskua, jossa k on satojen tai tuhansien bittien luokkaa. Montgomeryn eksponentiointialgoritmia käytettäessä lisälaskutoimien määrä on kiinteä (laskelmat , , alussa ja lopussa), ja MonPro-operaatio on nopeampi kuin tavallinen modulo-kertolasku [1] , joten Montgomeryn eksponentioalgoritmi antaa suorituskyvyn lisäys verrattuna "neliö ja kerro" -algoritmiin .

Algoritmin toteutus JavaScriptissä

powMod(a, e, m) { var r = 1; while (e > 0) { console.log('A='+a+', E='+e+', R='+r); if ((e & 1) == 0) { e = e >> 1; a = (a*a) % m; } muu { e = e - 1; r = (r*a) % m; } } console.log('A='+a+', E='+e+', R='+r); palauttaa r; }

Muistiinpanot

  1. Montgomeryn kertolaskualgoritmien analysointi ja vertailu Arkistoitu 1. heinäkuuta 2010.

Kirjallisuus