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)--; } } }

Rispondi quotando