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.
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. palaaKun 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.
Montgomeryn algoritmin käyttäminen oikeuttaa itsensä nostettaessa lukua tehomoduuliin .
Toiminto
1. 2. 3. kun i=j-1 arvoon 0 jos sitten 4. paluuLuvun 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 .