Seta lui Eratostene

De la Wikipedia, enciclopedia liberă.
Salt la navigare Salt la căutare

Sita Eratostene este un algoritm antic pentru calcularea tabelelor numerelor prime până la un anumit număr predeterminat. Acest principiu își datorează numele matematicianului Eratostene din Cirene , care a fost creatorul acestuia. Este încă folosit ca algoritm de număr prim de multe programe de calculator datorită simplității sale. Deși nu este complet eficient, de fapt, este destul de simplu de tradus în orice limbaj de programare .

Algoritm

Animație cu sită

Procedura este următoarea: toate numerele naturale sunt scrise începând de la pana cand într-o listă numită sită. Apoi, toți multiplii primului număr al sitei sunt șterse (cernute) (exclusiv el însuși). Primul număr ne șters mai mare decât este apoi luat iar operația se repetă cu numerele care urmează, continuând până când operația este aplicată ultimului număr care nu a fost șters. Restul numerelor sunt numere prime mai mici sau egale cu .

Este ca și cum s-ar folosi site cu ochiuri mai mari treptat: primul permite numai numere non-multiple de , al doilea numai non-multipli ai , si asa mai departe.

In caz de exemplu, procesul de cernere se termină cu numărul deoarece este maximul prim al cărui pătrat nu depășește și se poate dovedi că procesul de cernere pentru a căuta primul până la un anumit număr încetează întotdeauna când se depășește rădăcina pătrată a lui . Într-adevăr, fiecare număr a sitei inițiale, care conține toate numerele naturale care nu depășesc un dat , cade din sită care corespunde celui mai mic dintre separatoarele sale prime .

Dacă indicăm cu cel mai mic divizor prim al avem:

Rezultă că , de la care este întotdeauna mai mică sau egală cu rădăcina pătrată a .

O implementare a algoritmului lui Eratostene în Haskell care calculează al n-lea număr prim:

 takePrime :: Int -> Int
takePrime = takePrimeAux [ 2 .. ]
  Unde
    takePrimeAux :: [ Int ] -> Int -> Int
    takePrimeAux ( l : ls ) 1 = l
    takePrimeAux ( l : ls ) n = takePrimeAux ( filter ( \ x -> ( mod x l ) / = 0 ) ls ) ( n - 1 )

Exemplu

Pentru a găsi toate numerele prime mai mici decât , puteți proceda după cum urmează:

  • Scrieți lista tuturor numerelor întregi din la :
 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
  • Ștergeți din listă multiplii de :
 2 3 5 7 9 11 13 15 17 19 21 23 25 27 29
  • Primul număr de pe listă după si ; ștergeți multiplii de :
 2 3 5 7 11 13 17 19 23 25 29
  • Primul număr de pe listă după si ; ștergeți din listă multiplii rămași ai :
 2 3 5 7 11 13 17 19 23 29
  • Primul număr de pe listă după si , deoarece nu mai există multipli, numerele rămase sunt numerele prime pe care le căutam.

Alte proiecte

linkuri externe

Matematica Portalul de matematică : accesați intrările Wikipedia care se ocupă de matematică