Feu la funció eratostenes (N) tal que, donat un enter
N, retorni un vector amb tots els nombres primers fins a
N segons l’algoritme del Garbell
d’Eratòstenes.
Aquesta tècnica és molt simple, i consisteix en posar tots els números de 2 fins a i anar marcant els que no són primers de la següent manera:
Marquem tots els elements com a primers.
Anem al primer número marcat. Sigui aquest número.
Anem saltant de en elements i anem desmarcant els elements a la p-èssima posició com a divisibles (no-primers).
Ho fem mentre hi hagi números per desmarcar.
Per exemple, si N=10, tindríem primer:
| 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
|---|---|---|---|---|---|---|---|---|
| T | T | T | T | T | T | T | T | T |
Ara busquem el primer element marcat de la llista. En aquest cas és el 2. Ara anem saltant de 2 en 2 i desmarquem es elements per on passem:
| 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
|---|---|---|---|---|---|---|---|---|
| T | T | T | T | T |
Ara anem al següent element marcat, en aquest cas el 3, i fem la mateixa operació:
| 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
|---|---|---|---|---|---|---|---|---|
| T | T | T | T |
En aquest cas només hem desmarcat el 9, ja que el 6 l’havíem desmarcat abans, ja que és múltiple de 2. Ara anem al següent element marcat, en aquest cas és el 5:
| 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
|---|---|---|---|---|---|---|---|---|
| T | T | T | T |
Aquí ja podem parar, ja que si anem al següent element marcat (el 7), quan saltem de 7 en 7 ja sortirem del vector. Per tant, ara la funció ha de tornar un vector amb els elements marcats. En aquest cas, el vector ha de contenir .
Un enter N.
Un vector amb els nombres primers fins a N, calculats
amb l’algoritme del garbell d’Eratòstenes.
Input
5
Output
2 3 5
Input
100
Output
2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97