Fermaov test za proste brojeve

S Vikipedije, slobodne enciklopedije

Fermaov test je nasumični test kojim se utvrđuje da li je broj potencijalno prost.

Ideja[uredi | uredi izvor]

Mala Fermaova teorema tvrdi da, ako je p prost broj, i , onda važi

Ukoliko želimo da utvrdimo da li je p prost broj, možemo birati proizvoljne brojeve a u zadatom intervalu i proveravati da li važi jednakost. Ukoliko nađemo broj a za koji jednakost nije ispunjena, dokazali smo da je broj p složen. Sa druge strane, ukoliko je jednakost ispunjena za puno različitih brojeva a, možemo reći da je p verovatno prost broj, ili pseudoprost broj.

Može se desiti da u testiranju ne izaberemo vrednost broja a za koju jedakost ne bi bila tačna. Svaki broj a za koji važi

kada je n složen, se naziva Fermaov lažov. Ukoliko izaberemo a tako da je

onda se a naziva Fermaov svedok za složenost broja n.

Algoritam i vreme izvršavanja[uredi | uredi izvor]

Algoritam testa može biti formulisan na sledeći način:

Ulaz
n: broj za koji se testira da li je prost
k: parametar koji zadaje koliko puta treba testirati da li je broj prost
Izlaz
složen ako je n složen, inače verovatno prost
ponovi k puta:
izaberi proizvoljan a iz intervala (1, n − 1]
ako je an − 1 mod n ≠ 1 vrati složen
vrati verovatno prost

Korišćenjem brzih algoritama za modularno stepenovanje dobija se da je vreme izvršavanja ovog algoritma

O(k × log2n × log log n × log log log n),

gde k broji koliko puta smo testirali proizvoljno a, dok je n broj za koji ispitujemo da li je prost.

Mane[uredi | uredi izvor]

Postoje izvesne vrednosti broja n, poznate kao Karmajklovi brojevi, za koje su svi brojevi a, koji su uzajamno prosti sa n, Fermaovi lažovi. Iako su takvi brojevi retki, ima ih dovoljno da se umesto Fermaovog testa za proveru da li je dati broj prost često upotrebljavaju drugi testovi, kao što su Miler-Rabin i Solovej-Štrasen.

U opštem slučaju, ako n nije Karmajklov broj, onda bar pola svih brojeva

ima osobinu da su Fermaovi svedoci. Da bi se ovo pokazalo, dovoljno je pretpostaviti da je a Fermaov svedok, a da su a1, a2, ..., as Fermaovi lažovi. Onda važi

što znači da su svi a × ai za i = 1, 2, ..., s Fermaovi svedoci.

Upotreba[uredi | uredi izvor]

Program za enkripciju PGP koristi ovaj test u svojim algoritmima. Verovatnoća da će PGP izgenerisati Karmajklov broj je manja od 1 : 1050, što je više nego dovoljno za praktičnu upotrebu.

Literatura[uredi | uredi izvor]

  • Tomas Kormen (Thomas H. Cormen), Čarls Lejserson (Charles E. Leiserson), Ronald Rivest (Ronald L. Rivest) i Kliford Stin (Clifford Stein). Uvod u algoritme (Introduction to Algorithms), drugo izdanje, MIT Press and McGraw-Hill. 2001. ISBN 978-0-262-03293-3. str. 889-890.

Vidi još[uredi | uredi izvor]