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!!!!!