Lehmannin menetelmä

Kokeneet kirjoittajat eivät ole vielä tarkistaneet sivun nykyistä versiota, ja se voi poiketa merkittävästi 6. lokakuuta 2016 tarkistetusta versiosta . tarkastukset vaativat 45 muokkausta .

Lehmanin algoritmi (tai Sherman Lehmanin algoritmi ) jakaa tietyn luonnollisen luvun deterministisesti aritmeettisissa operaatioissa . Ensimmäisen algoritmin ehdotti amerikkalainen matemaatikko Sherman Lehman vuonna 1974 [1] . Tämä algoritmi oli ensimmäinen deterministinen kokonaislukufaktorointialgoritmi, jonka arvio oli pienempi kuin . Tällä hetkellä se on puhtaasti historiallisesti kiinnostava, eikä sitä pääsääntöisesti käytetä käytännössä. [2]

Lehmannin menetelmä

Lehmannin menetelmä kehittää Fermatin faktorointimenetelmän ajatuksia ja etsii luvun jakajia käyttämällä yhtälöä jollekin kokonaisluvulle . Se perustuu seuraavaan lauseeseen. [2]


Lauseen lause [1]

Oletetaan, että  se on positiivinen pariton kokonaisluku ja  on sellainen kokonaisluku, että . Jos , missä ja ovat yksinkertaisia ​​ja

sitten on ei-negatiivisia kokonaislukuja , Ja Sellainen, että

, , , jos outoa,

ja

.

Jos  on alkuluku, tällaisia ​​numeroita , ja ei ole olemassa.

Muokattu Lehmannin menetelmä

Lauseen lause

Olkoon komposiittiluku, joka on kahden epäyhtälöt tyydyttävän parittoman koprimeluvun tulo . Sitten on luonnollisia lukuja ja sellaisia

1. Tasa-arvo pätee , 2. Epätasa-arvo pätee . [2] Tämän lauseen todistamiseksi tarvitsemme seuraavan lemman.

Lemma

Olkoon lauseen ehdot täyttyvät. Sitten on luonnollisia lukuja , että ja .

[3] Todiste lemasta

Jos , eli , niin lauseen väite pätee . Seuraavaksi lasketaan .

Laajennetaan se jatkuvaksi murto - osaksi . Merkitään th konvergentti k :llä . Sitten

... _ _

koska . Valitsemme ensimmäisen numeron siten

, .

Sellainen luku varmasti löytyy, sillä viimeisellä sopivalla murtoluvulla on nimittäjä . Todistakaamme tämä ja hyväksykäämme lemman väite. On selvää, että . Edelleen,

sopivien fraktioiden ominaisuudet.

Tarkastellaanpa tapausta ensin . Tässä tapauksessa

,

Q.E.D.

Harkitse nyt tapausta . Sitten käännämme eriarvoisuudet , mistä . Siksi jatkuvien murtolukujen ominaisuuksien perusteella epäyhtälöt

. Täältä

Lemma on todistettu. [3]

Lauseen todistus

Antaa ja olla parittomia jakajia . Antaa ja , Jos ja täyttää lausunnon Lemma, niin tasa-arvo pätee , Missä . Lemman mukaan kokonaisluku täyttää epäyhtälön . Näin ollen lauseen ensimmäinen väite täyttyy.

Todistaaksemme toisen väitteen, asetamme , Koska , Sitten ja . Käyttämällä ylempää arviota saamme . Mistä se seuraa . Lause on todistettu. [neljä]

Algoritmi (muokattu)

Olkoon outo ja .

Vaihe 1. Tilan tarkistaminen . Jos tekijöiden lisääminen ei ollut mahdollista tässä vaiheessa , siirry vaiheeseen 2.

Vaihe 2. Jos vaiheessa 1 jakajaa ei löydy ja  se on yhdistetty , niin , missä  ovat alkuluvut , ja . Tarkista sitten kaikille , onko luku luonnollisen luvun neliö. Jos on, niin vertailu tehdään ja :

tai .

Tässä tapauksessa epäyhtälö tarkistetaan . Jos se täyttyy, se  on jakaminen kahteen tekijään.

Jos algoritmi ei ole löytänyt jakautumista kahdeksi tekijäksi, se  on alkuluku. [5]

Tämä algoritmi tarkistaa ensin, onko sillä alkujakajia, jotka eivät ylitä , ja sitten järjestää arvojen haun ja tarkistaa seuraavan lauseen toteutettavuuden. Jos haluttuja arvoja ja ei löydy, saamme, että luku on alkuluku. Näin ollen voimme pitää tätä algoritmia yksinkertaisuuden testinä [6]

Työvoima

Lasketaan riippuvuus tekijöille jaetun luvun suuruudesta

Ensimmäinen askel on suorittaa jakooperaatiot luvun pienten jakajien löytämiseksi .

Toisen vaiheen monimutkaisuus arvioidaan operaatioissa, joissa luku testataan , onko se täydellinen neliö. Toisen vaiheen monimutkaisuus arvioidaan ylhäältä arvon avulla

.
Siten kaiken monimutkaisuus on arvo . [6]

Riippuvuus kertoimen luvun kapasiteetista

Useimmissa tapauksissa suoritusajan riippuvuus tutkittavan luvun bittisyvyydestä on tärkeämpi rooli. Kun arvolle on polynomiriippuvuus, saamme Lehmannin menetelmän suoritusajan eksponentiaalisen riippuvuuden faktoroidun luvun sanan pituudesta. [7]

, missä  on bitin syvyys.

Jotkut erikoistapaukset

Fermatin menetelmän parannuksena Lehmannin menetelmä riippuu myös merkittävästi luvun tekijöiden välisestä etäisyydestä, sen suoritusaika riippuu lineaarisesti etäisyydestä. Kuitenkin, jos tekijöiden välinen etäisyys on pieni, Lehmannin menetelmä häviää merkittävästi Fermat-menetelmälle .

Lukujen, joissa on pieni alkujakaja, tilanne on päinvastainen - Lehmann-menetelmä valitsee nopeasti alkutekijän peräkkäisten jakojen ansiosta vaiheessa yksi. [7]

Pseudokoodi

for to do

if then return end if

end for for to do

for to do if then if then return else if then return end if end if end for

end for

Selitykset:

tarkoittaa, että on kokonaisluku jaollinen .

Funktio palauttaa jos on täydellinen neliö ja muuten.

Funktio palauttaa lukujen ja :n suurimman yhteisen jakajan . [7]

Menetelmän rinnakkaisen toteutuksen mahdollisuudet

Yleinen idea

Rinnakkaistoteutus perustuu seuraavaan lähestymistapaan: [7]

Vaihe 1:
Jokaiselle tekijöihin jakamiseen liittyvälle laskennalliselle prosessille annetaan oma joukko mahdollisia jakajia joukosta . Laskennallinen prosessi tarkistaa vuorotellen jaollisuuden jakajajoukon elementeillä. Tietyin aikavälein pääkoordinaattoriprosessi " kyseenalaistaa" laskennalliset prosessit jakajan määrittämiseksi. Siinä tapauksessa, että yksinkertaisuuden tarkistaminen riittää , koordinaattoriprosessi, saatuaan tiedon jakajan sijainnista, lähettää signaalin muille prosesseille työn lopettamiseksi. Jos jakajaa ei löydy tai tavoitteena on löytää kaikki jakajat, jakajien haku jatkuu.


Vaihe 2:
Jokaiselle laskentaprosessille, kuten vaiheelle 1, annetaan oma numerosarja joukosta . Laskennallinen prosessi tarkistaa vuorotellen kaikki algoritmissa kuvatut ehdot ja määrittää, löytyykö ei-triviaali tekijä. Vastaavasti vaiheessa 1 koordinaattoriprosessi kyselyt ajoittain prosesseille jakajaa etsiessään ja päättää suorittaako laskelmat loppuun vai ei.


Tämän lähestymistavan soveltaminen mahdollistaa lineaarisen kiihtyvyyden saavuttamisen prosessien lukumäärän kasvaessa koneessa, jossa on hajautettu muisti. [7]

Toteutus GPGPU- tekniikalla

Jotta GPGPU -tekniikkaa käyttävä algoritmi voidaan toteuttaa onnistuneesti , on ratkaistava kaksi ongelmaa: [8]
1. Päätä jokaiselle algoritmin toiminnalle, kannattaako se suorittaa CPU :lla vai GPU :lla .
2. Määritä käytettyjen GPU -ytimien määrä .

Yllä kuvattua lähestymistapaa voidaan käyttää ongelman jakamiseen. [kahdeksan]

Vaihe 1:
Kaikki tämän vaiheen toiminnot tulee suorittaa GPU :lla .

Olkoon käytettävissä olevien GPU -  ytimien lukumäärä ,  joukon elementtien lukumäärä . Harkitse kahta tapausta: 1. : Käytämme GPU- ytimiä . 2 .: Järjestä iteraatiot . Jokaisessa iteraatiossa suoritamme seuraavat jaot ytimille. Jokaisen iteraation lopussa päätämme, viedäänkö suoritus loppuun vai jatketaanko sitä.

Vaihe 2:

Jaa GPU - ytimien kesken samalla tavalla kuin vaiheessa 1. Suorita vaiheet 1-3 jokaiselle GPU -ytimelle: 1. Tarkista, onko luku luonnollisen luvun neliö. 2. Jos saat positiivisen tuloksen edellisestä kappaleesta, laske ja . 3. Katso arvot ja tarkista kunto . 4. Tarkista arvoille ja , jotka läpäisivät viimeisen tarkistuksen, että kaksoisehto täyttyy .



On suositeltavaa suorittaa viimeinen piste CPU :lla , koska näiden toimintojen suorittamisen todennäköisyys on pieni ja GPU :n haaratarkistus on melko hidasta. [kahdeksan]

Esimerkki

Analysoidaan esimerkkiä , sitten , missä , tarkistamme, onko luku luvun jakaja . On helppo varmistaa, että niitä ei ole, sitten siirrymme seuraavaan kappaleeseen.

Tarkistamme kaikille ja kaikille , onko luku luonnollisen luvun neliö. Meidän tapauksessamme on olemassa ja sellaisia, että lauseke on täydellinen neliö ja on yhtä suuri kuin . Siksi ja . Sitten , täyttää epäyhtälön ja on luvun jakaja . Tämän seurauksena jaoimme luvun kahteen tekijään: ja .

Muistiinpanot

  1. 1 2 Lehman, R. Sherman. Suurten kokonaislukujen faktorointi  // Laskennan matematiikka. - 1974. - T. 28 , nro 126 . - S. 637-646 . - doi : 10.2307/2005940 .
  2. 1 2 3 Nesterenko, 2011 , s. 140.
  3. 1 2 Vasilenko, 2003 , s. 65-66.
  4. Nesterenko, 2011 , s. 142.
  5. Vasilenko, 2003 , s. 65.
  6. 1 2 Nesterenko, 2011 , s. 143.
  7. 1 2 3 4 5 Makarenko A.V., Pykhteev A.V., Efimov S.S. Rinnakkaislukujen tekijöiden määrittelyalgoritmien tutkimus klusterijärjestelmissä // Omsk State University. F. M. Dostojevski (Omsk). - 2012. - V. 4 , nro 66 . - S. 149-158 .
  8. 1 2 3 Zheltov S. A. Sherman–Lehman-menetelmän mukauttaminen tekijöiden muodostusongelman ratkaisemiseksi CUDA-laskentaarkkitehtuuriin // Russian State University for the Humanities (Moskova). - 2012. - T. 14 , nro 94 . - S. 84-91 .

Kirjallisuus

  1. Vasilenko O. N. Lukuteoreettiset algoritmit kryptografiassa . - M .: MTSNMO , 2003. - 328 s. — ISBN 5-94057-103-4 . Arkistoitu 27. tammikuuta 2007 Wayback Machinessa
  2. Aleksei Nesterenko. Johdatus nykyaikaiseen kryptografiaan . - MTSNMO , 2011. - 190 s.
  3. Richard Crandall, Carl Pomerance. Laskennalliset näkökulmat . – 2. - Springer, 2011. - 597 s. — ISBN 0-387-25282-7 .