Ciao, parlando con il mio prof dei numeri primi, mi ha detto che c'è un algoritmo che permette di identificare i numeri primi da 1-N...in poche parole bisogna partire da 2 e eliminare tutti i suoi multipli fino a N, poi passare a 3 e fare la stessa cosa...fino a quando nn c sn più multipli...ecco...io ho provato a riportare questo in C...ma non con grandissimo successo...perchè sembra che il programma funzioni solo se inserisco N<=9...se metto N>9 va in crash...però io non ho capito per quale motivo...posto qua il codice...sperando che almeno qualcosa d sensato l'ho scritta...
codice:
/*Algoritmo numeri primi*/

#include <stdio.h>
#include <stdlib.h>

void primi ( int*, int* );
void del ( int*, int*);

int main ()
{
	int *vet, dim;
	int i;
	
	printf ("Numero elementi del vettore: ");
	scanf  ("%d", &dim);

	vet = (int *) malloc ( (dim+1) * sizeof(int));

	if ( vet == NULL ) { 
		printf ("Errore allocazione!!\n");
		return 0;
	}		
	
	for ( i=1; i<=dim; i++ ) 
		vet[i]=i;

	primi ( vet, &dim);

	for ( i=2; i<=dim; i++ )
		printf ("%4d", vet[i]);
	
	printf ("\n");
	free(vet);
	return 0;
}
void primi ( int* v, int *size)
{
	int x, y;

	for ( x=2; x<=*size; x++ ) {
		for ( y=x+1; y<=(*size); y++ ) {
			if ( (v[y]%v[x]) == 0 ) 
				v[y]=0;
		}
		del ( v, &(*size));
	}
}
void del ( int *v2, int *dim ) 

{

     int x, y, flag=0;


     for ( x=2; x<=(*dim) && flag==0; x++ ) {

        if ( v2[x] == 0 ) {

                flag=1;

                for ( y=x; y<=(*dim)-1; y++ ) {

                    v2[y] = v2[y+1];

                }

        (*dim)--;        

        }    

    }

}