Ho solo aggiunto un "break" e una variable "bool primo".
Ho anche indentato il codice.

codice:
#include <iostream>

using namespace std;

void chiedi_primo()
{
    long long p;
    bool primo;    
    
    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 {
        primo = true;
        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";
                primo = false;
                break;
            }
        if (primo)
            cout << p << " e' un numero primo!\n";
    }
}

int main()
{
    while (true)
       chiedi_primo();

    return 0;
}
P.S. Ho aggiunto anche che ti richiedesse il numero usando una FUNZIONE (chiedi_primo).