Factorisointi jatkuvilla murtoluvuilla

Lukuteoriassa jatkuva murtolukujen laskenta ( CFRAC ) on algoritmi kokonaislukujen laskemiseen alkutekijöiksi . Tämä on yleinen algoritmi, joka sopii mielivaltaisen kokonaisluvun kertoimiin .

Jatkuva murtolukumenetelmä perustuu Krajczykin algoritmiin ja käyttää jatkuvaa murtolukua , joka konvergoi jollekin positiiviselle kokonaisluvulle . Jatkettujen jakeiden menetelmän pohjalta rakennettiin Dixon-algoritmi , jonka kaavion mukaan sitten kehitettiin neliöllinen seulamenetelmä [1] .

Algoritmilla on monimutkaisuus O- ja L - merkinnöissä [2] .

Historia

Jatkettua fraktiomenetelmää ehdottivat D. G. Lehmer ja R. E. Powers vuonna 1931 [3] . Tämä menetelmä perustui Legendren ja Krajczyk ideoihin ja sen tarkoituksena oli hajottaa suuria lukuja, jotka sisältävät 30 tai enemmän desimaaleja . Saatua menetelmää ei kuitenkaan sovellettu sen toteuttamiseen liittyvien vaikeuksien vuoksi työpöydän lisäyskoneilla [4] .

1960-luvun lopulla John Brillhart huomasi tämän menetelmän soveltuvan hyvin tietokoneohjelmointiin , ja yhdessä Michael A. Morrisonin kanssa työskenteli tämä algoritmi tietokoneille vuonna 1975 [5] .

1970 -luvulla jatketusta murto-osien tekijöiden laskenta-algoritmista tuli paras tapa laskea alkutekijöitä käyttämällä usean tarkkuuden muotoa. Morrisonin ja Brillhartin IBM 360/91 -tietokoneella kirjoittama ohjelma käsitteli mielivaltaisia ​​25-numeroisia lukuja 30 sekunnissa ja 40-numeroisia lukuja 50 minuutissa. Vuonna 1970 tämän algoritmin avulla tehtiin seitsemännen Fermat-luvun faktorointi [4] :

Menetelmä pysyi suosittuna 1980-luvun alkuun asti , jolloin neliöllinen seulamenetelmä syntyi . Sen jälkeen jatkettujen jakeiden kertoimien menetelmä osoittautui kilpailukyvyttömäksi [6] .

Algoritmin kuvaus

Lehmerin ja Powersin menetelmä

Vuonna 1643 Pierre Fermat ehdotti algoritmia parittoman kokonaisluvun laskemiseksi . Lyhyesti sanottuna tämä algoritmi voidaan kuvata seuraavasti: anna . Sitten voi kirjoittaa

,

missä .

Tästä on selvää, että . Tämä tarkoittaa , että jos lajittelemme peräkkäin kokonaislukujen neliöt alkaen yläosaa lähimmästä neliöstä , ero on jossain iteraatiossa yhtä suuri kuin jonkin luvun neliö . Löydetyn lukuparin avulla voit löytää luvun tekijäparin : .

Siten Fermatin menetelmä vähentää luvun tekijöiden laskemisen ongelman löytääkseen kokonaisluvut, joiden erotus on yhtä suuri kuin alkuperäinen luku . Fermatin menetelmä löytää nopeasti luvun tekijät, kun sen jakajat ovat lähellä , ts. mahdollisimman epätasaisille numeroille. Jos luku on tasainen , niin Fermatin menetelmä voi toimia jopa hitaammin kuin koejako [2] .

Vuonna 1926 Maurice Krajczyk esitteli monografiassa [7] kokonaislukukerroinmenetelmänsä , joka oli Fermatin menetelmän "vahvistus".

Krajczyk ehdotti, että relaatiota tyydyttävien lukuparien sijasta etsitään vertailua tyydyttäviä pareja , ts. . Jos lisäksi , niin saamme vain triviaalin ratkaisun. Kuitenkin jos , niin määritetystä vertailusta käy ilmi , missä . Tämä merkitsee myös hajotusta: se on jaollinen : llä , mutta ei jaollinen kummallakaan :llä tai : llä , joten se on ei-triviaali jakaja [2] (katso #perustelu1 ).

Krajczykin innovaation jälkeen luvun jakajien löytämisen algoritmi on muuttunut merkittävästi: nyt sinun on edelleen laskettava eri , mutta nyt sinun ei tarvitse "odota" toista neliötä, vaan sinun täytyy yrittää rakentaa se kertomalla saadut luvut [2] .

Todellakin, harkitse muodon (ilmeisesti, ) numerosarjaa . Sitten, jos ts. , siitä seuraa, että [2] . Jotta voidaan määrittää, mitkä suhdeluvut on kerrottava, on tarpeen jakaa luvut tekijöiksi ja kertoa suhdeluvut siten, että tulot sisältävät alkukertoimia parillisina potenssiin, jolloin voit saada vertailun [8] .

Krajczykin menetelmä supistaa luvun factoring-ongelman useiden vertailujen ja factoring-lukujen muodostamiseen . Krajczyk ei kuitenkaan esittänyt erityistä algoritmia lukuparien etsimiseen eikä algoritmista tapaa koota muodon [8] vertailurelaatiot löydetyistä suhteista .

Vuonna 1931, vuonna [3] , Lemaire ja Powers ehdottivat kahta vaihtoehtoa näiden vertailujen luomiseksi. Molemmat muunnelmat perustuivat suhteisiin, jotka syntyvät neliöllisen irrationaalisuuden laajenemisesta jatkuviksi murto -osiksi , ja niillä oli ominaisuus, että magnitudit eivät ylittäneet [9] . Viimeinen epäyhtälö takaa, että luvut ovat pieniä, mikä helpottaa näiden lukujen hajottamista alkutekijöiksi [2] (ks . #justification2 ).

Samalla molemmat vaihtoehdot osoittautuvat vastaaviksi [3] : jos yksi algoritmin versio löytää ratkaisun, niin toinenkin versio löytää ratkaisun.

Molemmissa algoritmin versioissa oli kuitenkin haittapuoli - neliöllisen irrationaalisuuden laajeneminen jatkuvaksi murtoluvuksi on jaksollista ( Lagrangen lause ). Siksi tällä menetelmällä saatavien suhteiden määrä on rajallinen, eivätkä ne välttämättä riitä suhteiden asettamiseen ja vertailun muodostamiseen . Samaan aikaan, kuten käytännön kokeet osoittavat, suurilla arvoilla jatkuvaksi murto-osaksi laajentumisjakson pituus osoittautuu riittävän suureksi (luokkaa [10] ) tarvittavan määrän vertailuja varten. Tämän seurauksena suurille algoritmin molemmat versiot löytävät aina luvun tekijöiden jakamisen [ 11] .

Ensimmäinen vaihtoehto

Muista, että jokainen reaaliluku voidaan liittää kokonaislukujonoon , jota kutsutaan sen jatkuvaksi murtoluvuksi . Tämä vertailu on rakennettu seuraavasti

Jossa

Jos laajennetaan luku jatkuvaksi murtoluvuksi , niin laajennusprosessissa syntyvillä luvuilla on muotoa kokonaisluvut , ja , [12] .

Kertoimien yhtälö [3] täyttyy :

tämä tarkoittaa

Tuloksena oleva yhtälö on Krajczykin ehdottamassa muodossa ja sitä voidaan soveltaa luvun kertoimiin .

Laskemalla osamäärät peräkkäin , saamme muodon lausekkeet eri . Jakamalla suureet alkutekijöiksi ja yhdistämällä tuloksena saadut yhtäläisyydet saadaan muotovertailuja (katso #esimerkki1 ).

Toinen vaihtoehto

Jokaiseen jatkuvaan murto-osaan liitetään rationaalilukujen sarja , joka koostuu sopivista murtoluvuista , jotka on laskettu kaavoilla [3] :

ja pyrkii hajottavaan numeroon. Jos luku jaetaan jatkuvaksi murto -osaksi , relaatio [12] on tosi :

,

josta seuraa

Tuloksena olevalla yhtälöllä on muoto ja sitä voidaan käyttää luvun kertoimiin samalla tavalla kuin ensimmäisessä variantissa.

Algoritmi

Siten Lemairen ja Powersin korjaamalla Krajczykin menetelmällä on seuraava muoto [13] .

Kirjaudu sisään . Yhdistelmänumero .

Poistu . Luvun ei- triviaali jakaja .

  1. Laajenna jatkuvaksi murto-osaksi.
  2. Käytä yhtälöitä tai , hanki joukko muodon vertailuja ja hajota luvut alkutekijöiksi.
  3. Valitse ne yhtäläisyydet , joiden kertomalla saadaan lukujen laajenemisen tuloksena saatujen alkulukujen parillisten potenssien tulo . Siten saamme muodon suhteen .
  4. Jos , palaa sitten vaiheeseen 3. Jos olemassa oleva suhdeluku ei riitä yhtälön luomiseen , on tarpeen jatkaa luvun laajentamista jatkuvaksi murtoluvuksi ja palata sitten vaiheeseen 2.
  5. Käytä Euclid-algoritmia määrittääksesi .

Lemaire ja Powers esittivät työssään, kuinka on mahdollista generoida muotoisia suhteita , mutta he eivät Krajcikin tavoin antaneet algoritmista tapaa koota vertailurelaatioita löydetyistä vertailusuhteista . Tämä ongelma ratkaistiin Morrisonin ja Brillhartin menetelmällä.

Morrisonin ja Brillhartin menetelmä

1970-luvun alussa Michael Morrison ja John Brillhart ehdottivat artikkelissa [5] omaa algoritmiaan, joka on muunnos Lemairen ja Powersin algoritmin toisesta versiosta. Tällä hetkellä jatkettujen murtolukujen menetelmä ymmärretään juuri Morrisonin ja Brillhartin algoritmiksi.

Suurin ero Morrisonin ja Brillhartin toteuttaman algoritmin ja alkuperäisen version välillä oli menetelmän käyttöönotto vertailun muodostamiseksi algoritmisesti tietyn lomakkeen vertailusarjan perusteella . Tämän menettelyn toteuttamiseksi käytettiin "tekijäpohjan" [11] käsitettä .

Haemme lukujen tulona siten, että luvun modulon pienin absoluuttinen jäännös on alkulukujen tulo [14] . Sitten samoista alkuluvuista voidaan rakentaa ja .

Luonnollisen luvun tekijäkanta (tai tekijäkanta ) on joukko erillisiä alkulukuja , mahdollisesti poikkeuksena , joka voi olla yhtä suuri kuin . Tässä tapauksessa lukua, joka on joukon lukujen potenssien tulo, kutsutaan B-tasaiseksi luvuksi. Olkoon nyt B-sileitä lukuja, olkoon niiden laajennukset vähiten jäännösten itseisarvossa modulo . Laitetaan

,

missä , on vektoriavaruus kentän GF(2) päällä , joka koostuu nollien joukoista ja mittayksiköistä .

Valitsemme luvut niin, että vektorien summa on nolla. Määritellään

,

missä . Sitten .

On vielä lisättävä, että Morrisonin ja Brillhartin algoritmin tekijäkanta koostuu niistä modulo-alkuluvuista, jotka ovat neliöjäännös [15] .

Algoritmi

Morrisonin ja Brillhartin algoritmi on seuraava [16] .

Kirjaudu sisään . Yhdistelmänumero .

Poistu . Luvun ei- triviaali jakaja .

1. Muodosta laajennuskanta , jossa ja  ovat pareittain erillisiä alkulukuja, modulo , joka on neliöjäännös.

2. Otetaan kokonaisluvut , jotka ovat sopivien murtolukujen osoittajia tavalliseen jatkuvaan murto -osaan , joka ilmaisee luvun . Näistä osoittajista valitaan luvut, joiden absoluuttiset pienimmät jäännökset modulo ovat B - sileät :

,

missä . Jokaiseen numeroon liittyy myös indikaattorivektori .

3. Etsi (esimerkiksi Gaussin menetelmää käyttäen ) sellainen ei-tyhjä joukko , jossa on XOR - operaatio , , .

4. Laita . Sitten .

5. Jos , laita ja palauta tulos: .

Muussa tapauksessa palaa vaiheeseen 3 ja vaihda asetusta . (Yleensä on useita vaihtoehtoja valita joukko samalle tekijäkannalle . Jos kaikki mahdollisuudet on käytetty, niin tekijäkannan kokoa tulee suurentaa).

Tuloksena olevasta algoritmista kehitettiin myöhemmin Dixon- algoritmi , josta poistettiin jatkettujen jakeiden laitteisto [17] . Dixonin algoritmin luomisen jälkeen jatkettujen murtolukujen menetelmä oli itse asiassa Dixonin algoritmi, jossa ehdottoman pienimmän tähteen valintaa jalostettiin [18] .

Muutamia parannuksia

Anna . Yllä luku laajennettiin jatkuvaksi murto-osaksi . Tämä vaihtoehto on tehokas, kun ja ovat lähellä toisiaan. Kuitenkin mitä suurempi ero numeroiden ja välillä on , sitä aikaa vievämpi algoritmi tulee. Tässä tapauksessa voit sen sijaan laajentaa luvun jatkuvaksi murtoluvuksi , jossa pieni tekijä valitaan siten, että kaikki pienet alkuluvut sisällytetään tekijäkantaan [19] .

Lisäksi, koska jatkuvien murtolukujen menetelmä on rakennettu Dixon-algoritmin kaavan mukaan, siihen voidaan soveltaa Dixon-algoritmin lisästrategioita .

Perustelut

Seuraava lemma osoittaa, että jos ja verrataan , niin numeroilla ja on yhteisiä jakajia.

Lemma (tekijämäärityksestä) [20] . Antaa olla pariton yhdistelmäluku ja olla modulo jäännöksiä siten, että ja . Silloin eriarvoisuus täyttyy .

Seuraavat kaksi lausetta ovat keskeisiä jatkuvalle murto-osien tekijöiden laskenta-algoritmille. Ne osoittavat, että on mahdollista löytää lukujono, jonka neliöillä on pienet jäännökset modulo .

Lause [21] . Jos , jossa , ovat tavanomaisen jatkuvan murto- osan antaman luvun konvergentteja , niin arvio pätee kaikille .

Seuraus [21] . Olkoon positiivinen luku ei täydellinen neliö ja , jossa , ovat konvergentteja . Sitten ehdottoman pienimmälle jäännökselle (eli tähteen ja välissä sijaitsevalle jäännökselle ) epäyhtälö on tosi , ja .

Esimerkkejä

Esimerkki 1 [22]

Otetaan luku tekijöihin Lemairen ja Powersin ensimmäisellä algoritmilla .

1. Laajennamme luvun jatkuvaksi murtoluvuksi ja kirjoitamme luvut taulukkoon saadaksemme muotoa .

Taulukko: luvun 1081 kertoimet
i x i A i B i
yksi 32 57
2 25 kahdeksan
3 31 viisitoista
neljä 29 16
5 19 45
6 26 9

2. Kirjoita nyt vertailut kohteelle :

3. Kerrotaan neljäs ja viides vertailu, saadaan:

ja antamalla vastaavat tekijät ja vähentämällä :

tai

4. Saimme vertailun muotoon , jonka avulla voit löytää luvun 1081 jakajan. Todellakin, . Sitten luvun 1081 toinen jakaja on 47.

Esimerkki 2 [23]

Otetaan luku tekijöihin Morrisin ja Brilhartin menetelmällä .

1. Rakennamme laajennuskannan pienistä alkuluvuista valitsemalla luvut, joiden modulo on neliöjäännös, joka tarkistetaan laskemalla Legendre-symbolit :

Näin ollen tekijäkanta on yhtä suuri kuin , .

2. Etsimme sopivien murtolukujen osoittajia numeroon :

Valitsemme ne, joiden arvot ovat B-tasaisia. Laskelmien tulokset on kirjoitettu taulukkoon:

k i Pi_ _ P 2 i e i
yksi 2 27691 (1, 0, 0, 1, 1, 0, 0)
2 3 50767 (0, 1, 1, 0, 1, 0, 0)
3 6 1389169 (1, 0, 0, 1, 0, 1, 0)
neljä 13 12814433311 (0, 0, 0, 1, 1, 1, 0)
5 16 2764443209657 (1, 1, 0, 0, 0, 0, 1)
6 kahdeksantoista 20276855015255 (1, 0, 0, 0, 0, 1, 0)
7 19 127498600693396 (0, 0, 1, 1, 0, 0, 0)
kahdeksan 24 2390521616955537 (1, 0, 0, 0, 1, 0, 0)

3. Koska , saamme

4. ,

, .

5. Ehto täyttyy, joten laskemme .

Siksi ,.

Laskennallinen monimutkaisuus

RSA - salausjärjestelmän käyttöönoton myötä 1970 -luvun lopulla faktorointialgoritmien laskennallinen monimutkaisuus tuli erityisen tärkeäksi [2] .

R. Schruppel suoritti heuristisen analyysin Morris- ja Brilhart-algoritmin suoritusajasta vuonna 1975 , vaikka sitä ei julkaistu [24] [2] .

Tarkempi arvio (joka jäi silti heuristiseksi) tehtiin vuonna [25] . Esitetään tämän työn mukaiset kompleksisuuden arvioinnin tulokset.

Tässä artikkelissa arvioita saattaessa tehdään joitain heuristisia oletuksia. Oletetaan esimerkiksi, että jos algoritmi muodostaa pareja siten, että , niin ainakin yksi niistä täyttää epäyhtälöt

.

Lausuma [26] . Jos , ja tekijäkanta koostuu ja kaikista alkuluvuista siten, että:

,

sitten laskettaessa suppenevia murtolukuja, joissa , voimme olettaa, että algoritmi jakaantuu kahdeksi tekijäksi heuristisella arviolla aritmeettisten operaatioiden monimutkaisuudesta .

Katso myös

Muistiinpanot

  1. Knuth, 2013 , s. 439 441.
  2. 1 2 3 4 5 6 7 8 Pomerance, 1996 .
  3. 1 2 3 4 5 Lehmer, Powers, 1931 .
  4. 1 2 Knuth, 2013 , s. 434.
  5. 12 Morrison, Brillhart, 1975 .
  6. Makhovenko, 2006 , s. 223.
  7. Kraitchik M. Theorie des Nombres. Tome I ja II. — Pariisi: Gauthier-Villars. – 1926.
  8. 1 2 Nesterenko, 2012 , s. 173.
  9. Nesterenko, 2012 , s. 175.
  10. Yaschenko, 1999 , s. 113.
  11. 1 2 Nesterenko, 2012 , s. 178.
  12. 1 2 Yashchenko, 1999 , s. 112-113.
  13. Nesterenko, 2012 , s. 173,185.
  14. Manin, 1990 , s. 78.
  15. Makhovenko, 2006 , s. 220.
  16. Makhovenko, 2006 , s. 218-220.
  17. Knuth, 2013 , s. 439.
  18. Makhovenko, 2006 , s. 219.
  19. Yaschenko, 1999 , s. 114.
  20. Nesterenko, 2012 , s. 172.
  21. 1 2 Makhovenko, 2006 , s. 219-220.
  22. Nesterenko, 2012 , s. 176-177.
  23. Makhovenko, 2006 , s. 221-222.
  24. Knuth, 2013 , s. 436.
  25. Pomerance, 1982 .
  26. Vasilenko, 2003 , s. 87.

Kirjallisuus