See also ebooksgratis.com: no banners, no cookies, totally FREE.

CLASSICISTRANIERI HOME PAGE - YOUTUBE CHANNEL
Privacy Policy Cookie Policy Terms and Conditions
Certyfikat pierwszości - Wikipedia, wolna encyklopedia

Certyfikat pierwszości

Z Wikipedii

W teorii liczb, certyfikat pierwszości albo dowód pierwszości to zwięzły formalny dowód że dana liczba jest pierwsza, który można szybko zweryfikować – w przeciwieństwie do czasochłonnego przeprowadzenia testu pierwszości. Istnienie certyfikatów pierwszości dowiodło że problem znajdowania liczb pierwszych leży w klasie NP: problemów których rozwiązania można sprawdzić w czasie wielomianowym.

[edytuj] Certyfikaty Pratta

Najbardziej znanymi certyfikatami pierwszości (choć nie pierwszymi wynalezionymi) sa tzw. certyfikaty Pratta, wynalezione przez Pratta w 1975 r. Bazują one na odwróceniu małego twierdzenia Fermata z dodanym warunkiem który uzupełnia to odwrócenie:

Załóżmy że znamy liczbę całkowitą x taką że:
  • x jest względnie pierwsza z n
  • x n −1 ≡ 1 (mod n)
  • Dla każdej liczby pierwszej p która dzieli n −1, nie zachodzi x(n −1)/p ≡ 1 (mod n).
Wtedy n jest liczbą pierwszą

Znając taką liczbę x (nazywaną świadkiem) i rozkład na czynniki pierwsze n −1, powyższe warunki można szybko sprawdzić: wymaga to liniowej liczby działań na potęgach (bo każda liczba ma mniej dzielników pierwszych niż cyfr), z których każde wymaga O(log n) mnożeń (przy zastosowaniu szybkiego potęgowania).

Niestety powyższy algorytm można oszukać tak żeby zaakceptował liczbę złożoną. W tym celu można podać mu fałszywy rozkład na czynniki pierwsze n −1, w którym będą znajdowały się liczby złożone. Przykładowo załóżmy że twierdzimy że 85 jest pierwsza, podając świadka x=4 i równanie 84=6×14 jako rozkład n −1. Wtedy:

  • 4 jest względnie pierwsze z 85
  • 485−1 ≡ 1 (mod 85)
  • 4(85−1)/6 ≡ 16 (mod 85), 4(85−1)/14 ≡ 16 (mod 85)

Algorytm wywnioskuje że 85 jest pierwsza. Zauważmy że nie możemy samodzielnie szukać rozkładu n −1 na czynniki pierwsze, ponieważ nie znamy algorytmu który robi to w wielomianowym czasie.

Lepszym sposobem rozwiązania tego problemu jest udostępnienie certyfikatów pierwszości również dla każdego czynnika n −1: w tej samej postaci, ale mniejszych i łatwiejszych do sprawdzenia. Postępujemy w ten sposób rekurencyjnie, aż dojdziemy do czynników o których wiemy że są pierwsze (np. do 2). Kompletny certyfikat ma wtedy postać drzewa ze znanymi liczbami pierwszymi w liściach. Przykładowe drzewo udowadniające że 229 jest liczbą pierwszą może wyglądać tak:

  • 229 (x=6, 229−1 = 22×3×19)
    • 2 (znana liczba pierwsza)
    • 3 (x=2, 3−1 = 2)
      • 2 (znana liczba pierwsza)
    • 19 (x=2, 19−1 = 2×32)
      • 2 (znana liczba pierwsza)
      • 3 (x=2, 3−1 = 2)
        • 2 (znana liczba pierwsza)

Zauważmy że iloczyn liczb na każdym poziomie drzewa jest nie większy niż początkowa liczba, a więc drzewo ma rozmiar liniowy. Liczba poziomów jest logarytmiczna, ponieważ n −1 dzieli się przez 2 dla wszystkich nieparzystych liczb pierwszych. Tym samym weryfikacja całego drzewa jest trwa co najwyżej O(log n) razy dłużej niż pierwotny algorytm.

W praktyce generowanie certyfikatów Pratta dla dużych liczb jest trudne do zrealizowania, ponieważ wymaga rozłożenia na czynniki pierwsze n −1. W szczególnych wypadkach jest to łatwe (np. dla liczb Fermata), ale w ogólności używa się certyfikatów łatwiejszych do wygenerowania takich jak certyfikaty Atkin-Goldwasser-Kilian-Morain.

[edytuj] Linki zewnętrzne

W innych językach


aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - en - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu -