Esercizio crivello Eratostene

di il
2 risposte

Esercizio crivello Eratostene

Ciao a tutti !
L'esercizio è il seguente: utilizzando il crivello di Eratostene stampare tutti i numeri primi minori di n
Questo è il mio codice :

#include <stdlib.h>
#include <stdio.h>
#define MAX 100

int main(void){
int v[MAX],n,i,j,k;
printf("Inserisci un numero minore di %d: ", MAX );
scanf("%d",&n);
for (i=2;i<=n;i++)
    v[i]=1;
for (i=2;i<=n;i++){
    for(j=i+i;j<=n;j=j+i)
    v[j]=0;
}
for(k=2;k<=n;k++)
if(v[k]=1){
    printf("%d",k);
    printf("\n");
}
return(0);
}
Non capisco dove è l'errore , quando eseguo il programma il compilatore restituisce tutti i numeri minori di n , non tutti i primi minori di n
Grazie

2 Risposte

  • Re: Esercizio crivello Eratostene

    if(v[k]=1)
    Sicuro?

    In ogni caso è inutile andare a cercare i multipli di un numero che abbiamo già assodato non essere primo...

    Inoltre se ci rifletti ti renderai conto che per n=99 basta fermarsi a i=11 per avere la certezza di aver già settato a 0 tutti i numeri non primi!
  • Re: Esercizio crivello Eratostene

    Inoltre se ci rifletti ti renderai conto che per n=99 basta fermarsi a i=11 per avere la certezza di aver già settato a 0 tutti i numeri non primi!
    Ok , per il fatto che ogni numero n se non è primo allora ha certamente un divisore <= radice di n , quindi credo di potermi fermare a i=10.
    Sicuro?
    v[k]==1
    Ora cerco di effettuare il miglioramento che mi hai suggerito , grazie !

    Un'ultima cosa , la variabile k è inutile vero ?
    Posso tranquillamente riciclare i oppure j per l'ultimo ciclo ?
Devi accedere o registrarti per scrivere nel forum
2 risposte