Algoritmit nopeaan eksponentiomoduuliin

Modulo-nopeat eksponentioalgoritmit  ovat eräänlaisia ​​modulo -eksponenttialgoritmeja , joita käytetään laajalti erilaisissa salausjärjestelmissä nopeuttamaan laskentatoimia suurilla luvuilla.

Menetelmä kiinalaisen jäännöslauseen avulla

Menetelmän kuvaus

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 .

Esimerkki

Olkoon 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 ;

Sovellus

Tästä algoritmista voidaan saada merkittävä hyöty kertolaskua suoritettaessa. Kertominen suoritetaan kaksi kertaa nopeammin tätä algoritmia käytettäessä.

Laskennallinen monimutkaisuus

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 .

Toistuva neliöinti- ja kertolaskumenetelmä

Menetelmän kuvaus

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.

Esimerkki

Olkoon se vaadittu laskemaan . Esitetään aste muodossa . Edustetaan muodossa

Sovellus

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.

Laskennallinen monimutkaisuus

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.

Montgomeryn eksponentiomenetelmä

Historia

Peter Montgomery ehdotti tätä menetelmää vuonna 1985 nopeuttamaan modulaarista eksponentiota.

Menetelmän kuvaus

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ä

Esimerkki

Anna , ja haluat kertoa kaksi numeroa ja (eli neliö)

on kuva

(tarkistaa, onko kuva )

Kerromme kuvat:

,

Teemme siirtymisen kertolaskukuvasta haluttuun esikuvaan

,

,

Näin ollen prototyyppi

Sovellus

Tällä menetelmällä on suorituskykyetu toistuvaan neliöinti- ja kertolaskumenetelmään verrattuna, koska kahden luvun modulokerto on paljon nopeampaa.

Laskennallinen monimutkaisuus

Tämän menetelmän avulla voit pienentää (suurilla arvoilla ) funktion laskennan yhteen kertolaskuun kahdesta koon numerosta . Montgomeryn kertolaskujen monimutkaisuus arvioidaan .

Algoritmi "koulu"-menetelmällä

Menetelmän kuvaus

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 .

"Koulu"-menetelmän laskennallinen monimutkaisuus

Muodon lausekkeella on laskennallinen monimutkaisuusestimaatti −

Katso myös

Muistiinpanot

Kirjallisuus