Modulo-nopeat eksponentioalgoritmit ovat eräänlaisia modulo -eksponenttialgoritmeja , joita käytetään laajalti erilaisissa salausjärjestelmissä nopeuttamaan laskentatoimia suurilla luvuilla.
Vaaditaan laskea missä luvut ovat riittävän suuria ja jaetaan moduuli alkujakajiksi . Sitten nopeaa eksponentiota varten voit käyttää kiinalaista jäännöslausetta ja ratkaista yhtälöjärjestelmä (kun olet aiemmin laskenut jäännökset Fermatin lauseella, jossa ):
Korvaamalla mukavuussyistä järjestelmän ratkaisemme suhteessa ja saamme .
EsimerkkiOlkoon se vaadittu laskemaan
Edustamme järjestelmää muodossa
Korvaamalla t ensimmäisestä yhtälöstä toiseen, saamme , sitten , tai , tai ;
korvaamalla sitten t ensimmäisestä yhtälöstä kolmanteen, ottaen huomioon lausekkeen saamme tai , sitten ;
siis siis ;
Tästä algoritmista voidaan saada merkittävä hyöty kertolaskua suoritettaessa. Kertominen suoritetaan kaksi kertaa nopeammin tätä algoritmia käytettäessä.
Tämän menetelmän avulla voit vähentää laskelmien määrää kertaa. Olkoon se vähän pitkä . Tavallisella eksponentiolla se kestää noin kertolaskuja modulo. Oletetaan, että haluamme laskea . Vähentämällä ja ongelma rajoittuu laskemiseen . Jokaisen asteen pituus tässä merkinnässä on . Siksi jokainen eksponentiooperaatio vaatii operaatioita. Total vaatii kertolaskuja modulo alkuluvun tai alkuperäisen kertolasku modulo sijasta .
Olkoon se vaadittu laskemaan . Kuvittele tutkinto , missä
Laitetaan se muotoon:
Seuraavaksi lausekkeen arvo lasketaan ja korvaus suoritetaan muunnetussa lausekkeessa.
Tämä toimenpide suoritetaan, kunnes tulos löytyy.
EsimerkkiOlkoon se vaadittu laskemaan . Esitetään aste muodossa . Edustetaan muodossa
Jos - alkuluku tai on kahden suuren alkuluvun tulo, käytetään yleensä toistuvan neliöinti- ja kertolaskumenetelmää. Kuitenkin, jos se on komposiitti, niin tätä menetelmää käytetään yleensä yhdessä kiinalaisen jäännöslauseen kanssa.
Tämän algoritmin keskimääräinen monimutkaisuus on yhtä suuri kuin operaatiot, joissa kerrotaan kaksibittiset luvut plus operaatiot jaetaan -bittiset luvut -bittisellä luvulla. -bittisille ja pitemmille numeroille tämä algoritmi suoritetaan melko nopeasti tietokoneella.
Peter Montgomery ehdotti tätä menetelmää vuonna 1985 nopeuttamaan modulaarista eksponentiota.
Tässä menetelmässä jokainen numero liitetään tiettyyn kuvaan ja kaikki laskelmat suoritetaan -painikkeella , ja lopuksi suoritetaan siirtyminen kuvasta numeroon.
Lause (Montgomery). Antaa olla coprime positiivisia kokonaislukuja, ja . Sitten mikä tahansa kokonaisluku on jaollinen , ja . Lisäksi, jos , ero on joko , tai . |
Tämän lauseen avulla voimme laskea optimaalisella tavalla joidenkin kätevästi valitun arvon .
Määritelmä 1. Numeroille , , , niin että gcd ja , kutsumme — luvun loppuosa on määrä . |
Määritelmä 2. Kahden kokonaisluvun Montgomeryn tuloa kutsutaan luvuksi |
Lause (Montgomeryn säännöt). Olkoon numerot , koprime ja . Sitten ja |
Eli selvyyden vuoksi kirjoitamme eksponentiolausekkeen :
Algoritmi (Montgomeryn tuote). Antaa kokonaislukuja annetaan , Jossa on pariton, ja . Tämä algoritmi palauttaa . 1.[Function M Montgomery] { ; ; //Laueen mukaisesti (Montgomery) . 2.[Oikea tulos] jos ; paluu ; } |
Algoritmi (Montgomeryn eksponentiomenetelmä). Valitaan luvut , ja samalla tavalla kuin algoritmille (Montgomeryn tuote). Tämä algoritmi palauttaa . Merkitsemme binääribittejä . 1.[Alkuasetus] ; //Käytetään jotakin jakomenetelmää jäännöksellä. ; //Käytetään jotakin jakomenetelmää jäännöksellä. 2.[Exponentiointikaavio] for { ; // algoritmin avulla (Montgomeryn tuote) . jos ; } //Nyt vastaa . 3 [Loppututkinto] ; |
Tuloksena saamme kuvan , josta saamme lopullisen tuloksen ja lauseke lasketaan etukäteen. Kahden luvun tulolla tulos näyttää tältä
EsimerkkiAnna , ja haluat kertoa kaksi numeroa ja (eli neliö)
on kuva
(tarkistaa, onko kuva )
Kerromme kuvat:
,
Teemme siirtymisen kertolaskukuvasta haluttuun esikuvaan
,
,
Näin ollen prototyyppi
Tällä menetelmällä on suorituskykyetu toistuvaan neliöinti- ja kertolaskumenetelmään verrattuna, koska kahden luvun modulokerto on paljon nopeampaa.
Tämän menetelmän avulla voit pienentää (suurilla arvoilla ) funktion laskennan yhteen kertolaskuun kahdesta koon numerosta . Montgomeryn kertolaskujen monimutkaisuus arvioidaan .
Tarkastellaan selvyyden vuoksi menetelmää kantaa varten , eli suoritamme laskelmia in -binäärisessä (tai binäärisessä, koska ) lukujärjestelmässä. Pohjalla on plussa, että jakotoiminto siirtyy oikealle ja kertolasku siirtyy vasemmalle.
Määritelmä 1. Ei-negatiivisen kokonaisluvun esitys lukujärjestelmässä, jossa on kanta (tai luvun -arinen merkintä ) on lyhin kokonaislukujen sarja , jota kutsutaan merkinnän numeroiksi siten, että jokainen näistä numeroista täyttää epäyhtälön , ja tasa-arvo |
Harkitse esimerkiksi binäärialgoritmia tuotteesta ottamiseksi .
Algoritmi (binäärialgoritmi kertomiseen ja jäännöksen ottamiseen). Olkoon positiiviset kokonaisluvut annetaan siten, että , . Tämä algoritmi palauttaa yhdistelmäoperaation tuloksen . Oletetaan, että luvun binääriesitys on annettu määritelmän 1 mukaisesti siten, että luvun bitit ovat muotoa , ja se on merkitsevin bitti. 1.[Alkuasetus] ; 2.[Muunna kaikki bitit] for { ; jos ; jos ; jos ; } paluu ; |
Tällä menetelmällä on yksi haittapuoli: se ei hyödynnä monibittistä aritmetiikkaa, joka on saatavilla kaikissa nykyaikaisissa tietokoneissa. Siksi käytetään yleensä suuria alustoja .
Muodon lausekkeella on laskennallinen monimutkaisuusestimaatti −