Tonelli-Shanks-algoritmi

Kokeneet kirjoittajat eivät ole vielä tarkistaneet sivun nykyistä versiota, ja se voi poiketa merkittävästi 7.3.2020 tarkistetusta versiosta . vahvistus vaatii 1 muokkauksen .

Tonelli-Shanks-algoritmi (Shanks kutsuu sitä RESSOL-algoritmiksi) kuuluu modulaariseen aritmetiikkaan ja sitä käytetään vertailujen ratkaisemiseen.

missä  on neliöllinen jäännös modulo ja  on pariton alkuluku .

Tonelli-Shanks-algoritmia ei voi käyttää yhdistelmämoduuleille; Modulokomposiitin neliöjuuren etsiminen vastaa laskennallisesti tekijöiden jakamista [1] .

Alberto Tonelli kehitti vastaavan mutta hieman monimutkaisemman version tästä algoritmista vuonna 1891. Tässä käsitellyn algoritmin version kehitti itsenäisesti Daniel Shanks vuonna 1973.

Algoritmi

Syöttötiedot :  — pariton alkuluku,  — kokonaisluku , joka on neliöllinen jäännös modulo , toisin sanoen , jossa  on Legendre-symboli .

Algoritmin tulos : jäännös , joka tyydyttää vertailun .

  1. Valitsemme kahden potenssit kohdasta , eli anna , missä pariton, . Huomaa, että jos eli , niin ratkaisu määräytyy kaavan mukaan . Seuraavaksi oletamme .
  2. Valitsemme mielivaltaisen neliöllisen nonresiduen eli Legendre-symbolin ja asetamme .
  3. Anna myös
  4. Suoritamme syklin:
    1. Jos , niin algoritmi palauttaa .
    2. Muuten silmukasta löydämme pienimmän , , siten, että iteroimalla neliöinti.
    3. Anna , ja anna palata syklin alkuun.

Kun vertailuratkaisu on löydetty, toinen vertailuratkaisu löytyy muodossa .

Esimerkki

Tehdään vertailu .  on pariton, ja koska , 10 on neliöllinen jäännös Eulerin kriteerin mukaan .

Koska , täältä saamme tietysti 2 vertailuratkaisua.

Todiste

Anna . Anna nyt ja huomioi se . Viimeinen vertailu pysyy totta algoritmin pääsilmukan jokaisen iteraation jälkeen. Jos jossain vaiheessa , niin algoritmi päättyy .

Jos , Harkitse neliöllistä ei- jäännösmoduulia . Olkoon , sitten ja , mikä osoittaa, että järjestys on .

Vastaavasti saamme sen , joten järjestys jakautuu , joten järjestys on . Koska  on neliö modulo , niin se on myös neliö, mikä tarkoittaa, että .

Oletetaan, että ja , ja . Kuten ennenkin, se säilytetään; kuitenkin tässä rakentamisessa sekä ja on järjestys . Tästä seuraa, että on järjestys , missä .

Jos , niin , ja algoritmi pysähtyy palauttaen . Muussa tapauksessa käynnistetään silmukka uudelleen samanlaisilla määritelmillä , kunnes saadaan , joka on yhtä suuri kuin 0. Koska naturalien sekvenssi on tiukasti pienenevä, algoritmi päättyy.

Algoritmin nopeus

Tonelli-Shanks-algoritmi toimii keskimäärin (kaikilla mahdollisilla syötteillä (neliölliset jäännökset ja ei-jäännökset))

modulo kertolasku, jossa on  binääriesityksen numeroiden lukumäärä ja binääriesityksen  numeroiden lukumäärä . Jos vaadittu neliöllinen ei-jäännös lasketaan tarkistamalla satunnaisesti valitusta , onko se neliöllinen ei-jäännös, niin tämä vaatii keskimäärin kahden Legendre-symbolin laskemisen [2] . Kaksi laskettujen Legendre-symbolien keskimääräisenä lukumääränä selitetään seuraavasti: todennäköisyys, että se on neliöllinen jäännös on  - todennäköisyys on suurempi kuin puolet, joten keskimäärin kestää noin kaksi tarkistusta, onko se neliöllinen jäännös.

Tämä osoittaa, että käytännössä Tonelli-Shanks-algoritmi toimii erittäin hyvin, jos moduuli on satunnainen, eli kun se ei ole erityisen suuri suhteessa binääriesityksen numeroiden määrään . Cipolla-algoritmi toimii paremmin kuin Tonelli-Shanks-algoritmi silloin ja vain jos . Jos sen sijaan Sutherlandin algoritmia käytetään diskreetin logaritmin suorittamiseen 2- Sylow-aliryhmälle , tämä sallii lausekkeen kertolaskujen määrän korvaamisen asymptoottisesti rajatulla arvolla [3] . Todellakin, riittää löytää sellainen , joka tyydyttää silloinkin (huomaa, että se on 2:n kerrannainen, koska  se on neliöllinen jäännös).

Algoritmi vaatii neliöllisen ei-jäännöksen löytämisen . Tällä hetkellä ei ole olemassa determinististä algoritmia , joka löytäisi sellaisen pituuden polynomiajassa . Jos yleistetty Riemannin hypoteesi kuitenkin pitää paikkansa, on olemassa neliöllinen ei-jäännös , [4] , joka on helppo löytää tarkistamalla määrätyissä rajoissa polynomiajassa . Tämä on tietysti pahimman tapauksen arvio, koska, kuten yllä on esitetty, riittää, että tarkastetaan keskimäärin 2 satunnaista neliöllisen ei-jäämän löytämiseksi.

Sovellus

Tonelli-Shanks-algoritmia voidaan käyttää pisteiden etsimiseen jäännöskentän elliptisellä käyrällä . Sitä voidaan käyttää myös laskelmiin Rabinin salausjärjestelmässä .

Yleistys

Tonelli-Shanks-algoritmi voidaan yleistää mihin tahansa sykliseen ryhmään (sen sijaan ) ja :nnen asteen juurien löytämiseen mielivaltaiselle luonnolliselle , erityisesti : nnen asteen juurien laskemiseen äärellisessä kentässä [5] .

Jos samassa syklisessä ryhmässä on useita laskettavia neliöjuuria, jotka eivät ole kovin suuria, voidaan algoritmin parantamiseksi ja yksinkertaistamiseksi ja sen nopeuden lisäämiseksi tehdä taulukko elementtien neliöiden neliöjuurista seuraavasti:

  1. Erottelemme kahden tehot : Olkoon sellainen, että , on outoa.
  2. Anna .
  3. Etsitään juuri suhdetaulukosta ja laitetaan
  4. Paluu .

Muistiinpanot

  1. Oded Goldreich, Computational monimutkaisuus: käsitteellinen näkökulma , Cambridge University Press, 2008, s. 588.
  2. Gonzalo Tornaria , Neliöjuuret modulo p  (linkki ei saatavilla) , sivu 2.
  3. Sutherland, Andrew V. (2011), Rakenteen laskenta ja diskreetit logaritmit äärellisissä Abelin p -ryhmissä , Mathematics of Computation , osa 80: 477–500 , DOI 10.1090/s0025-57235-10-20 
  4. Bach, Eric (1990), Primaliteettitestauksen ja niihin liittyvien ongelmien eksplisiittiset rajat , Mathematics of Computation osa 55 (191): 355–380 , DOI 10.2307/2008811 
  5. LM Adleman, K. Manders, G. Miller: 1977, "On take roots in finite fields". Julkaisussa: 18th IEEE Symposium on Foundations of Computer Science. s. 175-177.

Kirjallisuus

Linkit