P−1 Metoda Pollard
Versiunea actuală a paginii nu a fost încă examinată de colaboratori experimentați și poate diferi semnificativ de
versiunea revizuită pe 4 aprilie 2019; verificările necesită
2 modificări .
Metoda lui Pollard este una dintre metodele de factorizare a întregilor .
Publicat pentru prima dată de matematicianul britanic John Pollard în 1974 [1] . Apariția acestui algoritm a condus [2] la o schimbare a conceptului de număr prim puternic folosit în criptografie , vorbind vag, un număr prim pentru care are divizori suficient de mari. În criptosistemele moderne, ei încearcă [2] să folosească numere prime puternice, deoarece acest lucru crește securitatea algoritmilor utilizați și a sistemelor în ansamblu.
![p-1](https://wikimedia.org/api/rest_v1/media/math/render/svg/f356ae51988add41a7da343e6b6d48fa968da162)
Definiții și fundal matematic
Un număr se numește - power- smooth [3] dacă toți divizorii săi primi, în puterile în care sunt incluși în extinderea acestui număr , satisfac . Conform micii teoreme a lui Fermat , pentru orice număr prim și pentru orice număr întreg astfel încât și sunt coprim , sau, care este echivalent în acest caz, nu împarte , avem:
![B](https://wikimedia.org/api/rest_v1/media/math/render/svg/47136aad860d145f75f3eed3022df827cee94d7a)
![{\displaystyle p^{\nu ))](https://wikimedia.org/api/rest_v1/media/math/render/svg/9dda360bd56566e05897d434a87262b34571d315)
![{\displaystyle p^{\nu }\leq B}](https://wikimedia.org/api/rest_v1/media/math/render/svg/55a38c25403ded0a4215f6a30d9e6921524998e1)
![p](https://wikimedia.org/api/rest_v1/media/math/render/svg/81eac1e205430d1f40810df36a0edffdc367af36)
![A](https://wikimedia.org/api/rest_v1/media/math/render/svg/ffd2487510aa438433a2579450ab2b3d557e5edc)
![A](https://wikimedia.org/api/rest_v1/media/math/render/svg/ffd2487510aa438433a2579450ab2b3d557e5edc)
![p](https://wikimedia.org/api/rest_v1/media/math/render/svg/81eac1e205430d1f40810df36a0edffdc367af36)
![A](https://wikimedia.org/api/rest_v1/media/math/render/svg/ffd2487510aa438433a2579450ab2b3d557e5edc)
![{\displaystyle a^{(p-1)}\equiv 1\mod p}](https://wikimedia.org/api/rest_v1/media/math/render/svg/bd795eb1e4d1a21446fa7258f2e8bc7db6c0e2b9)
, mai mult .
Algoritmul original (1974)
John Pollard a publicat pentru prima dată algoritmul descris mai jos în articolul său din 1974 „Theorems of Factorization and Primality Testing” în Proceedings of the Cambridge Philosophical Society [ 1] . Articolul este dedicat estimării teoretice a complexității factorizării unui număr mare sau, în cazul unui număr prim , verificării lui pentru simplitate. Următorul algoritm a fost o consecință și o ilustrare a calculelor teoretice ale lui Pollard.
![{\displaystyle N}](https://wikimedia.org/api/rest_v1/media/math/render/svg/f5e3890c981ae85503089652feb48b191b57aae3)
![{\displaystyle N}](https://wikimedia.org/api/rest_v1/media/math/render/svg/f5e3890c981ae85503089652feb48b191b57aae3)
Prima etapă
- Sarcina este să-și găsească propriul divizor al unui număr diferit de unul. În primul rând, trebuie să alegeți două numere astfel încât .
![N](https://wikimedia.org/api/rest_v1/media/math/render/svg/f5e3890c981ae85503089652feb48b191b57aae3)
![{\displaystyle B,M,}](https://wikimedia.org/api/rest_v1/media/math/render/svg/c222e70609344175e3d4827648a0b885603931ac)
![{\displaystyle 1<B<M<{\sqrt {N}),M<B^{2}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/f868152638db685dad3447826db275a2ef2d7a3b)
- Să calculăm acum numărul , unde toate numerele prime sunt mai mici decât . Aici este permisă o oarecare libertate în alegerea lui , dar se știe sigur că pentru mic , ar trebui să fie mai mare decât unu [1] .
![{\displaystyle M(B)=\prod _{k=1}^{m}p_{k}^{c_{k))}](https://wikimedia.org/api/rest_v1/media/math/render/svg/1d9db2c6af3d34741e711d0044e6c6b8cb05bf35)
![p_{k}](https://wikimedia.org/api/rest_v1/media/math/render/svg/01084a31964201514f3e6bd0136989e11ea6e58a)
![{\displaystyle B}](https://wikimedia.org/api/rest_v1/media/math/render/svg/47136aad860d145f75f3eed3022df827cee94d7a)
![c_{k}](https://wikimedia.org/api/rest_v1/media/math/render/svg/3d2f8052630e67b00d04e3487e1d68ed7070470b)
![p_{k}](https://wikimedia.org/api/rest_v1/media/math/render/svg/01084a31964201514f3e6bd0136989e11ea6e58a)
![c_{k}](https://wikimedia.org/api/rest_v1/media/math/render/svg/3d2f8052630e67b00d04e3487e1d68ed7070470b)
- Alegem un întreg mic și calculăm
![a>1](https://wikimedia.org/api/rest_v1/media/math/render/svg/bc5b9d9fb0ff9d4455e75ccd29676bd7f33da80e)
![{\displaystyle q=(b-1,N)}](https://wikimedia.org/api/rest_v1/media/math/render/svg/ce891ae172363cd279f2295f0eec5f1c32851984)
dacă am găsit divizorul , în caz contrar trecem la a doua etapă.
![{\displaystyle q\neq 1}](https://wikimedia.org/api/rest_v1/media/math/render/svg/64bc9fb6bdafb9d6b5a8d230b884d6dc531edaf4)
Etapa a doua
- La acest pas, este necesar să se calculeze secvența
![{\displaystyle F_{m}\equiv b^{m-1}-1\mod N,}](https://wikimedia.org/api/rest_v1/media/math/render/svg/5e5371cec6e8046d8b562d5ce9cd87e1c2d65af8)
unde este un prim, , sperând că la un pas vom ajunge
![m](https://wikimedia.org/api/rest_v1/media/math/render/svg/0a07d98bb302f3856cbabc47b2b9016692e3f7bc)
- Cel mai simplu mod [1] de a face acest lucru este de a calcula pentru fiecare număr impar prin înmulțirea cu , luând la intervale regulate. Dacă se găsește divizorul. Dacă , atunci este necesar să studiem această zonă mai precis.
![b^m](https://wikimedia.org/api/rest_v1/media/math/render/svg/12789d0680eb62e2a35066bbdf11a92c78de8965)
![m](https://wikimedia.org/api/rest_v1/media/math/render/svg/0a07d98bb302f3856cbabc47b2b9016692e3f7bc)
![b^{2}](https://wikimedia.org/api/rest_v1/media/math/render/svg/acf98b04bfc723606ebb4a7942fa3ab94becd2ee)
![{\displaystyle G_{i}=(b^{i},N)}](https://wikimedia.org/api/rest_v1/media/math/render/svg/4cec22df5a271822e9c31cde1d4fa954f91e7297)
![{\displaystyle 1<G_{i}<N}](https://wikimedia.org/api/rest_v1/media/math/render/svg/a0b2d26223d17fb1231b5afd24437923e0a67056)
![{\displaystyle G_{i}=N,G_{i-1}=1}](https://wikimedia.org/api/rest_v1/media/math/render/svg/d323a9bf17055fc7d227e8729ff55212eec28642)
Notă
Folosind această metodă, vom putea găsi numai astfel de divizori primi ai numărului pentru care [1] este adevărată :
![p](https://wikimedia.org/api/rest_v1/media/math/render/svg/81eac1e205430d1f40810df36a0edffdc367af36)
![N](https://wikimedia.org/api/rest_v1/media/math/render/svg/f5e3890c981ae85503089652feb48b191b57aae3)
![{\displaystyle p-1=A}](https://wikimedia.org/api/rest_v1/media/math/render/svg/2c6a5fd1103c4b3042107983d3194e4559f0cd58)
sau , unde este -power-smooth și este prim astfel încât
[1] .
![{\displaystyle p-1=Aq}](https://wikimedia.org/api/rest_v1/media/math/render/svg/e5833291da51b93e127096e0e8a9841874095b8f)
![A](https://wikimedia.org/api/rest_v1/media/math/render/svg/7daff47fa58cdfd29dc333def748ff5fa4c923e3)
![B](https://wikimedia.org/api/rest_v1/media/math/render/svg/47136aad860d145f75f3eed3022df827cee94d7a)
![q](https://wikimedia.org/api/rest_v1/media/math/render/svg/06809d64fa7c817ffc7e323f85997f783dbdf71d)
Versiunea modernă
Această versiune revizuită a algoritmului, în comparație cu originalul, folosește conceptele de uniformitate a legii puterii și se concentrează pe aplicații practice. Prima etapă a suferit modificări semnificative, în timp ce a doua a rămas practic neschimbată, din nou, din punct de vedere teoretic, nu s-a adăugat nimic semnificativ față de versiunea anterioară. Algoritmul de mai jos este cel care se referă atunci când oamenii vorbesc despre „metoda Pollard” [4] [5] .
Prima etapă
- Fie -smooth puterea, și este necesar să se găsească divizorul numărului . În primul rând, se calculează numărul în care produsul se realizează peste toate numerele prime în puteri maxime
![B](https://wikimedia.org/api/rest_v1/media/math/render/svg/47136aad860d145f75f3eed3022df827cee94d7a)
![N](https://wikimedia.org/api/rest_v1/media/math/render/svg/f5e3890c981ae85503089652feb48b191b57aae3)
![{\displaystyle M(B)=\prod _{i}p_{i}^{k_{i)}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/3f04dfd170eec2641de437baa2380b8a6261a693)
![p_{i}](https://wikimedia.org/api/rest_v1/media/math/render/svg/5bab39399bf5424f25d957cdc57c84a0622626d2)
![{\displaystyle k_{i}:p_{i}^{k_{i}}<B}](https://wikimedia.org/api/rest_v1/media/math/render/svg/b1131b8c36e5fab3fb5d5c647905243ea8710c56)
- Apoi divizorul dorit [4] , unde .
![{\displaystyle q=(b-1,N)}](https://wikimedia.org/api/rest_v1/media/math/render/svg/ce891ae172363cd279f2295f0eec5f1c32851984)
![{\displaystyle b=a^{M(B)}\mod N}](https://wikimedia.org/api/rest_v1/media/math/render/svg/52d080035ca57473fbbf6199709b2e9b44a758dc)
- Există două cazuri posibile în care algoritmul de mai sus va eșua [5] .
- În cazul în care se poate spune cu siguranță că y are un divizor care este puterea netedă și o alegere diferită trebuie să rezolve problema .
![{\displaystyle (b-1,N)=N}](https://wikimedia.org/api/rest_v1/media/math/render/svg/25094a5a48c1cb1d6f284426218c602b4a9a316b)
![n](https://wikimedia.org/api/rest_v1/media/math/render/svg/a601995d55609f2d9f5e233e36fbe9ea26011b3b)
![B](https://wikimedia.org/api/rest_v1/media/math/render/svg/47136aad860d145f75f3eed3022df827cee94d7a)
![A](https://wikimedia.org/api/rest_v1/media/math/render/svg/ffd2487510aa438433a2579450ab2b3d557e5edc)
- Într-un caz mai frecvent, când merită să treceți la a doua etapă a algoritmului, ceea ce crește semnificativ probabilitatea unui rezultat, deși nu o garantează.
![{\displaystyle (b-1,N)=1}](https://wikimedia.org/api/rest_v1/media/math/render/svg/aaf85597a327e58977375379ba6815e593eb5ccd)
Exemplu
Să alegem , atunci , să luăm și să calculăm acum , și în sfârșit .
![{\displaystyle N=10001}](https://wikimedia.org/api/rest_v1/media/math/render/svg/df44d6e72865485a0065badad7e33daae32f16a1)
![{\displaystyle B=10}](https://wikimedia.org/api/rest_v1/media/math/render/svg/a83d64488805932f7f68460bf0c1bed42e029710)
![{\displaystyle M(B)=2^{3}\cdot 3^{2}\cdot 5\cdot 7=2520}](https://wikimedia.org/api/rest_v1/media/math/render/svg/2ed572781a990f4a4ae94811f1d3ff8855ce772c)
![{\displaystyle a=2}](https://wikimedia.org/api/rest_v1/media/math/render/svg/4208bf5a67fc2ceb3a3bcd75aebb1d74fbb531bd)
![{\displaystyle b=a^{M(B)}\mod N=2^{2520}\mod 10001=3578}](https://wikimedia.org/api/rest_v1/media/math/render/svg/f0ffcad402fdf4019233651ccac1bdf2e58c6b49)
![{\displaystyle (b-1,N)=(3578-1,10001)=73}](https://wikimedia.org/api/rest_v1/media/math/render/svg/4b019aebaf53db4b2bbab3784028d250fae97d38)
Note
- Pentru numere mari , numărul se poate dovedi a fi foarte mare, comparabil ca valoare cu , în astfel de cazuri poate fi recomandabil să factorizați aproximativ aceeași valoare și să calculați succesiunea
![B](https://wikimedia.org/api/rest_v1/media/math/render/svg/47136aad860d145f75f3eed3022df827cee94d7a)
![{\displaystyle M(B)}](https://wikimedia.org/api/rest_v1/media/math/render/svg/a3bfaebdf6f3e7689a43fd0a09be73c48873c2b0)
![{\displaystyle B!}](https://wikimedia.org/api/rest_v1/media/math/render/svg/9b394e27e3979f03d3acfa7daf54a54001658165)
![{\displaystyle M(B)}](https://wikimedia.org/api/rest_v1/media/math/render/svg/a3bfaebdf6f3e7689a43fd0a09be73c48873c2b0)
![{\displaystyle M(B)=\prod _{i}M_{i)}](https://wikimedia.org/api/rest_v1/media/math/render/svg/c66dfbc96e7079598157ef525200a0db73e5f01e)
![{\displaystyle a_{k+1}=a_{k}^{M_{k+1}}\mod N}](https://wikimedia.org/api/rest_v1/media/math/render/svg/70e7df4a599274719bd7e5a5e8385878917a9573)
.
Etapa a doua
- În primul rând, trebuie să fixați limitele , de obicei [5] [4] .
![{\displaystyle B_{1}=B,B_{2}\gg B}](https://wikimedia.org/api/rest_v1/media/math/render/svg/e321e875fdcea2d17bb90ca836f2936e9cc02c12)
![{\displaystyle B_{2}\leq B^{2}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/e6773cd5e4e6b2882d545e75eb8bf55e16306e7c)
- A doua etapă a algoritmului găsește divizori , astfel încât , unde este o putere netedă și prim astfel încât .
![N](https://wikimedia.org/api/rest_v1/media/math/render/svg/f5e3890c981ae85503089652feb48b191b57aae3)
![{\displaystyle p-1=q\cdot A}](https://wikimedia.org/api/rest_v1/media/math/render/svg/c75253b2de93d82f5e73917ba07c3174fc6b11ef)
![A](https://wikimedia.org/api/rest_v1/media/math/render/svg/7daff47fa58cdfd29dc333def748ff5fa4c923e3)
![B](https://wikimedia.org/api/rest_v1/media/math/render/svg/47136aad860d145f75f3eed3022df827cee94d7a)
![q](https://wikimedia.org/api/rest_v1/media/math/render/svg/06809d64fa7c817ffc7e323f85997f783dbdf71d)
![{\displaystyle B_{1}<q<B_{2}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/67ef258d7efdbf3ab6f5ede4e59676019c031ef9)
- Pentru cele ce urmează, vom avea nevoie de un vector de numere prime de la până la , din care să se obțină ușor un vector de diferențe între aceste numere prime , de altfel , sunt numere relativ mici, iar , unde este o mulțime finită [4] . Pentru a accelera funcționarea algoritmului, este util să precalculați toate [4] și să folosiți valori gata făcute.
![q_{i}](https://wikimedia.org/api/rest_v1/media/math/render/svg/2752dcbff884354069fe332b8e51eb0a70a531b6)
![B_1](https://wikimedia.org/api/rest_v1/media/math/render/svg/1fa091eb428443c9c5c5fcf32a69d3665c89e00c)
![B_{2}](https://wikimedia.org/api/rest_v1/media/math/render/svg/199944d59dcc18842dfd1deab6000a1d1dadcbae)
![{\displaystyle D=(D_{1},D_{2},...),D_{i}=q_{i+1}-q_{i))](https://wikimedia.org/api/rest_v1/media/math/render/svg/584af78a17607064c558deafc7189e27875b666f)
![D_{i}](https://wikimedia.org/api/rest_v1/media/math/render/svg/9f07b53d3212e08ca316a536c8aac0bbefa79ee1)
![{\displaystyle D_{i}\in \Delta }](https://wikimedia.org/api/rest_v1/media/math/render/svg/5bb7122eca2c0a499c19c14ffc7aaada197eb659)
![\Delta](https://wikimedia.org/api/rest_v1/media/math/render/svg/32769037c408874e1890f77554c65f39c523ebe2)
![{\displaystyle b^{\delta _{i)),\forall \delta _{i}\in \Delta }](https://wikimedia.org/api/rest_v1/media/math/render/svg/1603d3a63167be5902cf040b4b1c80769152b7e3)
- Acum este necesar să se calculeze secvenţial , unde , calculat în prima etapă, numărând la fiecare pas . De îndată ce , puteți opri calcularea.
![{\displaystyle c_{0}=b_{1}\mod N,c_{i}=c_{i-1}^{\delta _{i))\mod N}](https://wikimedia.org/api/rest_v1/media/math/render/svg/573f6c9cb29ac5b36e0b89674a0dc58c700bee1d)
![{\displaystyle b_{1}=a^{M(B_{1})}\mod N}](https://wikimedia.org/api/rest_v1/media/math/render/svg/4babe20a1ca7b990fbc6c3abae1bb31c36b174e8)
![{\displaystyle G=(c_{i}-1,N)}](https://wikimedia.org/api/rest_v1/media/math/render/svg/cdb430fa1d1711d4e118dec423865aa2e1c99995)
![{\displaystyle G\neq 1}](https://wikimedia.org/api/rest_v1/media/math/render/svg/36978ea2dde3ecf0c4ae5d170f2a55a55ecb857f)
Condiții de convergență
- Fie cel mai mic divizor , maximul să fie luat peste toate puterile împărțind [4] .
![p](https://wikimedia.org/api/rest_v1/media/math/render/svg/81eac1e205430d1f40810df36a0edffdc367af36)
![N](https://wikimedia.org/api/rest_v1/media/math/render/svg/f5e3890c981ae85503089652feb48b191b57aae3)
![{\displaystyle q^{t}=max(q_{i}^{t_{i)))}](https://wikimedia.org/api/rest_v1/media/math/render/svg/0933b3f3f9c2bfebce951a20be98632148f9aefc)
![{\displaystyle q_{i}^{t_{i)}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/2ae3d594f2d543e88705d8069d8b5112a829b68c)
![p-1](https://wikimedia.org/api/rest_v1/media/math/render/svg/f356ae51988add41a7da343e6b6d48fa968da162)
- Dacă , atunci divizorul va fi găsit la prima etapă a algoritmului
[4] .![{\displaystyle q^{t}<B_{1)}](https://wikimedia.org/api/rest_v1/media/math/render/svg/daf09b2d98d34a539257d113781f1ceb58f15e7e)
- În caz contrar, pentru succesul algoritmului, este necesar ca , și toți ceilalți divizori ai formei să fie mai mici decât [4] .
![{\displaystyle q^{t}<B_{2}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/ad9b677c4ff915e848c1b597883320e4071a229a)
![p-1](https://wikimedia.org/api/rest_v1/media/math/render/svg/f356ae51988add41a7da343e6b6d48fa968da162)
![{\displaystyle q^{r)}](https://wikimedia.org/api/rest_v1/media/math/render/svg/ad9a27dc819f1ee738d2633bd52ba7e6d56fdcdd)
![B_1](https://wikimedia.org/api/rest_v1/media/math/render/svg/1fa091eb428443c9c5c5fcf32a69d3665c89e00c)
Modificări și îmbunătățiri
Evaluarea performanței
- Complexitatea primei etape este estimată ca , lăsând doar termenul de ordinul cel mai înalt, se obține estimarea primei etape a algoritmului [4] .
![{\displaystyle O(B\cdot \ln B\cdot (\ln N)^{2})}](https://wikimedia.org/api/rest_v1/media/math/render/svg/5c07f14546dc9824c7321671f005a72eb37f2efc)
- Conform estimării lui Montgomery, complexitatea celei de-a doua etape, până la termeni de ordinul cel mai înalt, este [1] [4] , unde numărul de numere prime este mai mic decât . Estimarea lui Cebyshev oferă o egalitate aproximativă .
![{\displaystyle O(\pi (B_{2}))}](https://wikimedia.org/api/rest_v1/media/math/render/svg/bbf4be63432968906374e1ae4fd91eb10df2d5bb)
![{\displaystyle \pi(s)}](https://wikimedia.org/api/rest_v1/media/math/render/svg/a3df25793e1e7a06faa8e939a794c8de8b4459bf)
![s](https://wikimedia.org/api/rest_v1/media/math/render/svg/01d131dfd7673938b947072a13a9744fe997e632)
![{\displaystyle \pi (s)\aprox {\frac {s}{\ln s)}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/8e45fccee334c8cab23dbe483f37b6978a81d2c6)
Înregistrări
În acest moment (10.10.2016), cei mai mari trei divizori primi găsiți prin metoda P-1 constau din 66, 64 și 59 de cifre zecimale [7] .
Numărul de cifre
|
p
|
Divizor de număr
|
Găsit de cine
|
Când a fost găsit
|
B
|
B2
|
66
|
672038771836751227845696565342450315062141551559473564642434674541
= 2 2 3 5 7 17 23 31 163 401 617 4271 13681 22877 43397 203459 1396027 6995393 13456591 211040281
|
|
T. Nogara
|
29.06.2006
|
|
|
64
|
1939611922516629203444058938928521328695726603873690611596368359
= 2 3 11 1187 9233729 13761367 43294577 51593573 100760321 379192511 2282985164293 + 1
|
|
M. Tervuren
|
13.09.2012
|
|
|
59
|
12798830540286697738097001413455268308836003073182603569933
= 2 2 17 59 107 113 20414117 223034797 269477639 439758239 481458247 1015660517 + 1
|
|
A. Krupp
|
30.06.2011
|
|
|
Aplicații
- GMP-ECM [8] - pachetul include aplicarea eficientă a metodei -.
![p-1](https://wikimedia.org/api/rest_v1/media/math/render/svg/f356ae51988add41a7da343e6b6d48fa968da162)
- Prime95 și MPrime, clienți oficiali GIMPS , folosesc o metodă pentru a elimina candidații.
Vezi și
Note
- ↑ 1 2 3 4 5 6 7 Pollard, 1974 .
- ↑ 1 2 Karaarslan E. Primality Testing Techniques and The Importance of Prime Numbers in Security Protocols // ICMCA'2000 : Proceedings of the Third International Symposium Mathematical & Computational Applications - Konya : 2000. - P. 280-287.
- ↑ Vasilenko, 2003 , p. 60.
- ↑ 1 2 3 4 5 6 7 8 9 10 11 Ișmukhametov, 2011 , p. 53-55.
- ↑ 1 2 3 Cohen, 2000 , pp. 439.
- ↑ 1 2 Montgomery, Silverman, 1990 .
- ↑ Zimmerman, Paul . Factori de înregistrare găsiți prin metoda p-1 a lui Pollard . Les pages des personnels du LORIA și du Centre Inria NGE. Consultat la 10 octombrie 2016. Arhivat din original pe 11 octombrie 2016.
- ↑ InriaForge: GMP-ECM (Eliptic Curve Method): Project Home . Consultat la 15 noiembrie 2012. Arhivat din original la 21 iulie 2012. (nedefinit)
Literatură
- Pollard J. M. Theorems on factorization and primality testing (engleză) // Mathematical Proceedings of the Cambridge Philosophical Society / B. J. Green - Cambridge University Press , 1974. - Vol. 76, Iss. 3. - P. 521-528. - 8p. — ISSN 0305-0041 ; 1469-8064 - doi:10.1017/S0305004100049252
- Cohen A. A Course in Computational Algebric Number Theory - Ediția a 4-a tipărită - Berlin , Heidelberg , New York : Springer , 2000. - 550 p. - ( Texte de absolvent în matematică ) - ISBN 978-3-540-55640-4 - ISSN 0072-5285 ; 2197-5612
- Vasilenko O. N. Algoritmi teoretici numeric în criptografie - M. : MTsNMO , 2003. - 328 p. — ISBN 978-5-94057-103-2
- Ishmukhametov Sh. T. Metode de factorizare pentru numere naturale : manual - Kazan : Universitatea din Kazan , 2011. - P. 53-55. — 190 p.
- Montgomery P. , Silverman R. D. O extensie FFT a algoritmului de factoring P-1 // Math . Comp. - AMS , 1990. - Vol. 54, Iss. 190. - P. 839-854. — ISSN 0025-5718 ; 1088-6842 - doi:10.1090/S0025-5718-1990-1011444-3