Shanksin neliömuotojen menetelmä on neliömuotojen käyttöön perustuva kokonaislukujen faktorointimenetelmä , jonka Daniel Shanks [1] kehitti vuonna 1975 Fermatin faktorointimenetelmän kehityksenä .
32-bittisissä tietokoneissa tähän menetelmään perustuvat algoritmit ovat kiistattomia johtajia lukujen välillä - ja todennäköisesti pysyvät sellaisina. [2] Tämä algoritmi voi jakaa melkein minkä tahansa 18-numeroisen yhdistelmäluvun alle millisekunnissa. Algoritmi on erittäin yksinkertainen, kaunis ja tehokas. Lisäksi tähän algoritmiin perustuvia menetelmiä käytetään apuvälineenä suurten lukujen jakajien, kuten Fermat-lukujen , laajentamisessa .
Algoritmin toinen nimi on SQUFOF ( englannin lyhenne on SQUARE FORm Factorization), joka tarkoittaa neliömuotoista tekijöitä . Tämä lähestymistapa on ollut varsin menestyksekäs vuosien varrella, ja sen seurauksena kirjallisuudesta löytyy tästä aiheesta useita erilaisia muunnelmia ja toteutuksia. [3] Useimmat menetelmät ovat monimutkaisia ja hämmentäviä, varsinkin kun menetelmä on toteutettava tietokoneella. Tämän seurauksena monet algoritmien muunnelmat eivät sovellu toteutukseen. Vuonna 1975 Daniel Shanks ehdotti kuitenkin algoritmin luomista, joka voidaan toteuttaa ja käyttää paitsi tietokoneessa myös yksinkertaisessa matkapuhelimessa.
Vaikka Shanks on kuvannut muita algoritmeja kokonaislukujen tekijöihin jakamiseen, hän ei ole julkaissut mitään SQUFOF-sivustolla. Hän piti aiheesta luentoja ja selitti menetelmänsä perusolemuksen melko pienelle ihmisjoukolle. Joissakin muiden tutkijoiden kirjoituksissa [4] [3] [5] [6] käsiteltiin algoritmia, mutta yksikään niistä ei sisällä yksityiskohtaista analyysiä. On myös mielenkiintoista, että Shanks tekee menetelmässään melkoisen määrän olettamuksia [7] , jotka valitettavasti jäivät ilman todisteita. Julkaisussa [8] esitetään joidenkin kokeiden tulokset, jotka osoittavat, että monet olettamukset ovat paikoillaan. Lopulta Shanks pystyi luomaan SQUFOFin näiden yksinkertaistavien oletusten perusteella.
Jotta ymmärtäisimme, kuinka tämä algoritmi toteutetaan, on tarpeen tietää vähimmäistiedot tässä menetelmässä käytetyistä matemaattisista objekteista, nimittäin neliömuodoista . Binäärinen neliömuoto on polynomi kahdessa muuttujassa ja :
Shanks - menetelmä käyttää vain epämääräisiä muotoja . Tarkoitamme kvadraattisen muodon erottajaa . Sanomme, että neliömuoto edustaa kokonaislukua , jos on sellaisia kokonaislukuja, että yhtälö on tosi: . Jos yhtälö on tosi , niin esitystä kutsutaan primitiiviseksi .
Minkä tahansa määrittelemättömän neliömuodon kohdalla pelkistysoperaattori voidaan määritellä seuraavasti:
, jossa määritellään kokonaislukuna , joka määritellään yksiselitteisesti ehdoilla: [8]Tulos, kun operaattoria käytetään lomakkeeseen kerran, kirjoitetaan muodossa . Operaattori määritellään myös:
, jossa määritellään samalla tavalla kuin edellisessä tapauksessa. Huomaa, että operaattoreiden soveltamisen seurauksena neliölliseen muotoon , jossa on diskriminantti , tuloksena olevilla neliömuodoilla on myös diskriminantti .Carl Gauss löysi menetelmän tätä muotoa vastaavan pelkistetyn muodon saamiseksi, ja se koostuu pelkistysoperaattorin peräkkäisestä soveltamisesta, kunnes se pelkistyy.
Lause.
Jokainen muoto vastaa jotakin pelkistettyä muotoa, ja mikä tahansa pelkistetty muoto on yhtä suuri kuin jokin positiivinen muoto . Jos - pienennetään, se myös pienenee. |
Lisäksi kaikkien neliömuotojen operaatioiden selkeää ymmärtämistä varten tarvitsemme neliön, vierekkäisten ja moniselitteisten neliömuotojen käsitteet
Shanks-menetelmän ideana on verrata hajotettavaa lukua toisen asteen binäärimuodolla diskriminantilla , jolla sitten suoritetaan sarja ekvivalentteja muunnoksia ja siirtyminen muodosta moniselitteiseen muotoon . Sitten tulee jakaja .
Ensimmäinen variantti toimii tietyn negatiivisen diskriminantin positiivisten ja määrällisten binääristen neliömuotojen kanssa, ja muotoluokkaryhmästä se löytää ambig-muodon , joka antaa diskriminantin faktorisoinnin. Ensimmäisen vaihtoehdon monimutkaisuus riippuu laajennetun Riemannin hypoteesin totuudesta . [9]
Toinen variantti on SQUFOF, joka käyttää luokkaryhmää binäärisiä neliömuotoja, joissa on positiivinen diskriminantti. Se löytää myös ambig-muodon ja tekijöihin erottavan tekijän. SQUFOF:n monimutkaisuus vastaa aritmeettisia operaatioita; algoritmi toimii kokonaislukujen kanssa, jotka eivät ylitä . Eksponentiaalisen monimutkaisuuden omaavien faktorointialgoritmien joukossa SQUFOF:ia pidetään yhtenä tehokkaimmista. [9]
Shanksin itsensä tekemien laskelmien mukaan algoritmin ensimmäisen ja toisen syklin iteraatioiden lukumäärä määräytyy luvun tekijöiden lukumäärän mukaan ja on suunnilleen yhtä suuri:
jossa on vakio, joka on suunnilleen 2,4 ensimmäisen iteraatiojakson aikana. [kymmenen]
Tarkemmin sanottuna algoritmi voidaan kirjoittaa seuraavasti: [11]
Syöte: Pariton yhdistelmäluku kertoimiin. Jos korvaamme Now'lla Viimeinen ominaisuus on välttämätön, jotta neliömuodon determinantti olisi perustava, mikä varmistaa menetelmän konvergenssin.
Tulos: Ei-triviaali jakaja .
1. Määrittele alkuperäinen neliömuoto , jossa erotteleva , jossa . 2. Suoritetaan pienennyssykliä, kunnes muoto muuttuu neliömäiseksi. 3. Laske neliöjuuri 4. Suoritetaan vähennyssykliä, kunnes toisen kertoimen arvo stabiloituu . Tämän silmukan iteraatioiden lukumäärän tulisi olla suunnilleen puolet ensimmäisen silmukan iteraatioiden lukumäärästä. Viimeinen arvo antaa luvun jakajan (mahdollisesti triviaali).Nyt kuvailemme tietokoneella toteutuksen algoritmia. [11] Huomaa, että vaikka algoritmin teoreettinen osa liittyy toisen asteen muotojen ekvivalenttisiin muunnoksiin, algoritmin käytännön osa perustuu jatkuvan murtoluvun kertoimien laskemiseen ilman muotoja. Jokainen silmukan iteraatio vastaa yhtä toimintoa, jossa vähennysoperaattori sovelletaan vastaavaan muotoon. Tarvittaessa voit palauttaa vastaavat lomakkeet käyttämällä kaavoja:
Syöttö: Yhdistelmänumero
Tulos: Ei-triviaali jakaja
Kuten jo mainittiin, tämä ei ole tämän algoritmin ainoa toteutus. Löydät myös algoritmin toteutuksen täältä [8]
Käytämme tätä menetelmää luvun kertomiseen [8]
|
|
Nyt voit nähdä toisessa jaksossa, että tästä syystä numero
Tätä algoritmia käytetään monissa NFS- ja QS -toteutuksissa pienten apulukujen tekijöihin laskemiseen, joita syntyy, kun otetaan huomioon suuri kokonaisluku. Joka tapauksessa SQUFOF:ia käytetään pääasiassa auttaja-algoritmina tehokkaammissa tekijöiden jakamisalgoritmeissa, ja siksi SQUFOF:ia käytetään yleensä sellaisten vaatimattomien lukujen kertoiluun, joissa ei ole pieniä alkujakajia. Tällaiset luvut ovat yleensä muutaman eri alkuluvun tulo. [8] .
Lukuteoreettiset algoritmit | |
---|---|
Yksinkertaisuustestit | |
Alkulukujen löytäminen | |
Faktorisointi | |
Diskreetti logaritmi | |
GCD:n löytäminen |
|
Modulo-aritmetiikka | |
Lukujen kerto- ja jakolasku | |
Neliöjuuren laskeminen |