Crivello di Eratostene

di il
8 risposte

Crivello di Eratostene

Salve ecco il codice del programma:
#include <stdio.h>
#include <stdlib.h>
main()
{
  int *v;
  int i=0,n,j=1;
  printf("N:");
  scanf("%d",&n);
  v=(int*)malloc(n*sizeof(int));
  for(i=0;i<=n;i++){
  	v[i]=i;
  }
  v[0]=0;
  v[1]=0;
  for(i=2;i<=n;i++){
  	if(v[i]!=0){
  		for(j=2*i;j<=n;j=j+i){
  			v[j]=0;
  		}
  	}
  }
  for(i=0;i<=n;i++){
  	if(v[i]!=0){
  		printf("%d--",v[i]);
  	}
  }
  free(v);

  printf ("\n\n");
}
Il programma funziona abbastanza bene anche se n è molto grande, ma per qualche ragione se n è minore di 50 esce un errore.Potete aiutarmi?

8 Risposte

  • Re: Crivello di Eratostene

    Errore? Puoi dire anche quale errore?

    P.S. Per cominciare, deve essere i<n e non i<=n
  • Re: Crivello di Eratostene

    Programma.exe ha smesso di funzionare

    Adesso da questo errore solo se n=10 o 50
  • Re: Crivello di Eratostene

    Fino a che numero lo riesci ad eseguire?
  • Re: Crivello di Eratostene

    1 000 000, oltre non ho provato per evitare problemi
  • Re: Crivello di Eratostene

    Mhm. Io invece non riesco ad arrivare ad un milione. Arrivo a 100000. Non riesce a inizializzarmi l'array con 1milione di elementi. È questa la causa secondo me
  • Re: Crivello di Eratostene

    Hai letto quello che ho scritto del confronto di i ed n ?
  • Re: Crivello di Eratostene

    Io ho provato ad avviare il programma semplicemente con
    int n[1000000];
    E si interrompe lo stesso
    Comunque si, la cosa di i<=n fa andare i un posto oltre il limite dell'array
  • Re: Crivello di Eratostene

    Non dichiarare quel vettore sullo stack, non ce la fai, lo stack di default ha dimensioni limitate. Mettilo fuori dal main
Devi accedere o registrarti per scrivere nel forum
8 risposte