Salve a tutti, vorrei un parere sul seguente esercizio:
ES: Il Crivello di Eratostene è un metodo per trovare i numeri primi. Esso funziona come segue:
1) Create un vettore con tutti gli elementi inizializzati a 1 (vero). Gli elementi del vettore i cui indici corrispondano a un numero primo resteranno a 1. Al termine della elaborazione, tutti gli altri elementi del vettore saranno azzerati.
2) Partendo dall'indice 2 del vettore (l'indice 1 è primo per definizione), qualora il valore dell'elemento puntato sia 1, scorrete il resto del vettore e azzerate gli elementi i cui indici siano multipli di quello dell'elemento puntato. Nel caso dell'indice 2, saranno azzerati tutti gli elementi successivi del vettore con indici che siano multipli di 2 (ovverosia gli indici 4, 6, 8, 10 ecc.). Nel caso dell'indice 3, saranno azzerati tutti gli elementi successivi del vettore con indici che siano multipli di 3 (ovverosia gli indici 6, 9, 12, 15 ecc.).
Nel momento in cui questo processo sarà stato completato, gli elementi del vettore che conterranno ancora il valore 1 indicheranno che il loro indice è un numero primo e, di conseguenza, che potrà essere visualizzato. Scrivete un programma che utilizzi un vettore di 1000 elementi per determinare e visualizzare i numeri primi compresi tra 1 e 999. Ignorate l'elemento 0 del vettore.
Io l'ho svolto in questo modo:
#include <stdio.h>
#define DIM 1000
void eratostene(int vett[], int i);
int main()
{
int vettore[DIM], i;
printf("\n");
for(i = 0; i < DIM; i++)
vettore[i] = 1;
for(i = 2; i < DIM; i++)
eratostene(vettore, i);
for(i = 2; i < DIM; i++)
{
if(vettore[i] != 0)
printf("%d ", i);
}
printf("\n\n");
return 0;
}
void eratostene(int vett[], int i)
{
int y;
if(vett[i] == 1)
{
for(y = i + i; y < DIM; y = y + i)
vett[y] = 0;
}
}
Secondo voi è corretto o va corretto qualcosa?
Grazie