Se vuoi guardati un po' anche questo codice scritto al momento... non l'ho ricontrollato molto ma di sicuro funziona. In particolare nota quell'istruzione "break" all'interno del secondo che interrompe l'esecuzione del ciclo "forzatamente", cioè anche se non è stato raggiunto il predicato di uscita. Chiediti infatti cosa succede se v[i] valesse (ad esempio) 100000005: questo numero è sicuramente NON primo, e il fatto che non lo sia lo sappiamo già per a = 5... quindi, perché continuare inutilmente con il ciclo?
codice:
#include <stdio.h>
int main(void) {
int array[10], j;
short i, v_boolean;
printf("Immettere 10 numeri interi positivi:\n");
for ( i = 0; i < 10; i++ ) {
printf("array[%d]: ", i);
scanf("%d", array + i);
}
printf("I numeri primi immessi sono i seguenti:\n");
for ( i = 0; i < 10; i++ ) {
if ( array[i] <= 1 )
continue; /* la successione dei numeri primi inizia da 2 */
if ( array[i] == 2 || array[i] == 3 )
printf("array[%d]: %d\n", i, array[i]);
else if ( array[i] % 2 ) {
v_boolean = 1;
for ( j = 3; j <= (int) array[i] / 2; j += 2)
if ( ! ( array[i] % j ) ) {
v_boolean = 0;
break;
/* se sono nel corpo di questo if, v[i] è sicuramente
divisibile almeno per j, quindi non è primo... e quindi
interrompo il ciclo senza continuarlo inutilmente */
}
if ( v_boolean )
printf("array[%d]: %d\n", i, array[i]);
}
}
return 0;
}