Salve a tutti, sto scrivendo un programma per un esame, e per l'esattezza è un programma che dovrebbe dirmi se un numero è primo oppure no. Il codice è il seguente:
codice:
#include<iostream>
#include<stdlib.h>
using namespace std;
int main () {
long long p;
cout<<"Digita un numero intero positivo: \n", cin>>p;
if(p<0) cout<<"Non fare il furbetto, voglio un numero positivo!\n";
else if(p<2) cout<<"Questo non è un numero primo.\n";
else if(p==2 || p ==3) cout<< p << "e un numero primo, e per giunta anche il mio preferito!\n";
else if(p%2 == 0) cout<< p <<" = 2*" << p/2 <<" e come vedi non è un numero primo." <<endl;
else {
for(int q = 3; q <= p/2; q+=2)
if (p%q == 0) {
cout<< p <<" = " << q << " * "<< p/q << endl;
cout<<"Dunque non e un numero primo.\n";
}
cout<< p <<" e' un numero primo!\n";
exit(0);
};
}
Il problema ora è questo, anzi questi:
1) quando digito alcuni numeri va benissimo, ma se ad esempio digito il numero "33", l'output è questo:
codice:
~/Scrivania/Downloads$ ./a.out
Digita un numero intero positivo:
33
33 = 3 * 11
Dunque non e un numero primo.
33 = 11 * 3
Dunque non e un numero primo.
33 e' un numero primo!
Dove ho sbagliato nel codice? Perché è evidente che 33 non è un numero primo, ma li mi butta entrambi i risultati.
Inoltre vorrei chiedervi anche queste cose:
1bis) come faccio affinché produca la lista di "moltiplicandi e moltiplicatori" possibili (come ha fatto nell'esempio, ossia mostrare che 33 = 11*3 e 3*11), senza che venga interrotto dalla scritta "dunque non è un numero primo"?
1tris) come faccio, una volta ottenuto il risultato, a fare in modo che il programma mi richieda di inserire un altro numero, senza che invece esca dal processo?
Grazie a tutti!!!!!