PDA

View Full Version : [C++] Verificare se un numero sia primo o meno


Dimension7
09-08-2009, 19:04
Sto facendo per esercizio un programmino che mi dice se un numero è primo o no, solo che a parte per i primi due if (cioè per i<=0, i=1,2,3) non funziona, mi stampa sempre "Non è un numero primo". Il problema quindi credo sia nel for, magari nell'uso errato del modulo...

Metodo:

bool isNumPrimo(int i){
if(i<=0){
cout << "Numero minore o uguale a 0" << endl;
return false;
}
if(i==1 || i==2 || i==3){
return true;
}
for(int j=2;j<i;i++){
if(i%j==0){
return false;
}
}
return true;
}

Main:

int main(int argc, char *argv[])
{
int num;
cout << "Questo programma verifica se un numero è primo o no" << endl;
cout << "Inserisci il numero" << endl;
cin >> num;
bool risposta=isNumPrimo(num);
if(risposta){
cout << num << " è un numero primo" << endl;
}
else{
cout << num << " non è un numero primo" << endl;
}
system("PAUSE");
return EXIT_SUCCESS;
}

VegetaSSJ5
09-08-2009, 20:24
nel for incrementi la variabile sbagliata. inoltre puoi fermarti a i/2, non serve arrivare ad i

DanieleC88
09-08-2009, 21:21
inoltre puoi fermarti a i/2, non serve arrivare ad i
In realtà ci si può fermare anche a sqrt(i) se non erro. :)

ciao ;)

Dimension7
09-08-2009, 22:35
Ecco, mi sono confuso perchè di solito i lo uso per gli indici :doh:
Grazie per le risposte, poi ragionerò su qual è matematicamente il limite entro cui far andare il ciclo

_Claudio
10-08-2009, 11:28
Ecco, mi sono confuso perchè di solito i lo uso per gli indici :doh:
Grazie per le risposte, poi ragionerò su qual è matematicamente il limite entro cui far andare il ciclo

Aiutino... è la radice quadrata... prova a dimostrare il perchè...

Silma
10-08-2009, 16:14
Puoi usare la radice quadrata, eliminare a priori i numeri pari (un if preventivo che controlla se sono divisibili per 2) e controllare a parte se il numero è 1. Dovrebbe funzionare.

Inoltre, per le divisioni successive puoi usare solo i numeri dispari (perchè se un numero è divisibile per un numero pari, è divisibile anche per 2 e quelli li abbiamo scartati in partenza!)

s0nnyd3marco
12-08-2009, 12:38
Il numero 1 non è un numero primo.
http://it.wikipedia.org/wiki/Numero_primo