Ciao a tutti. Da poco, pochissimo, sono a contatto con il linguaggio C.
Mentre svolgevo alcuni esercizi mi sono imbattuto in una difficoltà.
L'esercizio è il seguente: realizzare in linguaggio C la funzione corrispondente alla dichiarazione
extern unsigned int prossimo_numero_primo(unsigned int x); che deve ritornare il più piccolo numero primo maggiore di
x (ad es. 7). L'approccio all'esercizio non prevede l'utilizzo di printf() e scanf().
La funzione
primo() veniva richiesta in un esercizio precedente e restituisce 1 se
val è primo, 0 altrimenti.
Questo è quanto ho scritto:
int primo(unsigned int val) {
unsigned int i, m = 0;
for (i = 2; i <= (val / 2); ++i) {
if (val%i == 0) {
m = 1;
break;
}
}
if (m == 0)
return 1;
else return 0;
}
unsigned int prossimo_numero_primo(unsigned int x) {
int z;
if (primo(x + 1) == 1)
return x + 1;
else
for (z = 1; primo(x + z) == 0; z++)
x += z;
return x;
}
unsigned int main(void) {
unsigned int x = 7;
unsigned int risultato = prossimo_numero_primo(x);
return risultato;
}
Ciò però non produce l'output desiderato. I miei dubbi sono principalmente due:
1) La funzione
primo() è effettivamente corretta? Provando alcuni valori pare di sì, ma è matematicamente giusta?
2) Il ciclo for di
prossimo_numero_primo() dopo la prima iterazione procede di due in due saltando ovviamente dei possibili valori candidati, perché?
Scusate se ci sono errori anche banali, ma sono davvero i miei primi passi verso la programmazione.