În matematică și informatică , un certificat de primalitate este o dovadă riguroasă că un număr este prim . Deținerea unui certificat de primalitate vă permite să verificați dacă un număr este prim fără a recurge la teste de primalitate .
În teoria complexității computaționale , de regulă, se înțelege că dimensiunea certificatului, precum și timpul necesar pentru verificarea acestuia, depind polinom de lungimea intrării numărului, adică de numărul de cifre din aceasta.
Existența certificatelor de primalitate polinomială arată că probleme precum testarea primalității și factorizarea numerelor întregi aparțin clasei NP , întrucât, conform uneia dintre definițiile echivalente ale acestei clase, acestea sunt probleme a căror rezolvare poate fi verificată în timp polinomial dacă un se oferă certificat. În plus, aceste probleme se află în clasa co-NP , care decurge din definiția sa ca o clasă de complemente la problemele din NP - într-adevăr, oricare dintre divizorii săi netriviali poate fi un certificat polinom că un număr este compus.
Astfel, certificatele de primalitate au fost unul dintre primele indicii că testarea de primalitate nu a fost NP-completă , deoarece dacă ar fi, ar urma că o clasă NP este imbricată într-un co-NP, care, la rândul său, este de obicei[ clarifica ] considerat[ de cine? ] este incorectă. În plus, descoperirea certificatelor polinomiale a făcut ca testarea primarității să fie prima problemă despre care se știe că aparține atât NP, cât și co-NP, dar nu se știe ca fiind din clasa P. Odată cu apariția testului Agrawal-Kayal-Saxena în 2002, primul (și în prezent singurul[ când? ] ) din testul de primalitate polinomială deterministă, s-a constatat că problema se află încă în P.
Din punct de vedere istoric, conceptul de certificate de primalitate a fost introdus odată cu apariția certificatului Pratt , care a fost obținut în 1975 de Vaughan Pratt [1] , care a descris structura acestuia și a demonstrat că dimensiunea unui certificat depinde polinomial de lungimea unei înregistrări numerice. , și, de asemenea, că poate fi verificat pentru un timp polinomial. Certificatul se bazează pe testul Lucas , care, la rândul său, decurge din mica teoremă a lui Fermat :
(Teorema lui Luc) Un număr este prim dacă și numai dacă există un element în inelul modulo de reziduuri astfel încât:
|
Condițiile scrise înseamnă exact că ordinea elementului este .
Având un astfel de număr (numit martor al simplității ) și împărțirea în factori primi, puteți verifica rapid condițiile de mai sus - trebuie să efectuați exponențiații modulo, ceea ce se poate face pentru înmulțiri folosind exponentiația binară . Înmulțirile în sine în implementarea naivă („în coloană”) sunt efectuate în , ceea ce oferă o estimare generală a timpului de rulare în .
În același timp, trebuie avut în vedere că, pe lângă condițiile de mai sus, este necesar să se verifice și dacă numerele prezentate în certificat ca prime sunt într-adevăr astfel - astfel, pe lângă mărturia de primalitate și împărțirea în factori primi, certificatul de primalitate al unui număr trebuie să includă și certificate de primalitate a tuturor factorilor indicați în el. Astfel, este convenabil să se reprezinte un certificat sub formă de arbore, în nodurile cărora există numere prime și martorii lor de primalitate corespunzători, iar descendenții nodului în care este stocat numărul sunt divizori primi ai numărului . În consecință, numărul corespunde frunzelor copacului .
Se poate demonstra prin inducție că într-un astfel de arbore există cel mult noduri interne , adică cele care conțin un număr prim impar. Având în vedere că fiecare nod al arborelui stochează un pic pentru a scrie numere în el, putem concluziona că dimensiunea totală a arborelui nu depășește . Timpul total de verificare, la rândul său, poate fi estimat ca , deoarece este necesar să se efectueze acțiuni în fiecare dintre noduri.
În timp ce certificatele lui Pratt sunt utile în teorie și ușor de verificat, găsirea unui certificat pentru un număr necesită factorizare și alte numere potențial mari. Acest lucru este ușor de făcut în unele cazuri speciale, de exemplu, pentru numerele prime Fermat , dar în cazul general această sarcină este acum mult mai dificilă decât testul obișnuit al unui număr pentru primă.
Articolul „PRIMES este în P” [2] a fost o descoperire în informatica teoretică . Această lucrare, publicată de Manindra Agrawal și cei doi studenți ai săi Niraj Kayal și Nitin Saxena în august 2002, demonstrează că celebra problemă de primalitate poate fi rezolvată determinist în timp polinomial. Autorii au primit Premiul Gödel , care este de 5.000 USD [3] , și Premiul Fulkerson din 2006 pentru munca lor.
Deoarece testul de primalitate se poate face acum în timp polinomial folosind testul AKS , un număr prim poate fi văzut ca un certificat al propriei sale primari. Acest test este finalizat la timp , ceea ce face o astfel de verificare mai costisitoare decât utilizarea certificatului Pratt, dar nu necesită găsirea certificatului în sine.
Algoritmi teoretici numerelor | |
---|---|
Teste de simplitate | |
Găsirea numerelor prime | |
Factorizarea | |
Logaritm discret | |
Găsirea GCD | |
Modul de aritmetică | |
Înmulțirea și împărțirea numerelor | |
Calcularea rădăcinii pătrate |