Semiprimo testcase "strani"

Parlando con un amico ci siamo accorti che si riesce ad ottenere 100/100 in questo problema anche se il programma non funziona per buona parte dei numeri. In particolare se si assume che che ogni numero pari non sia semiprimo e che ogni numero dispari ( ad eccezione dei numeri primi) sia semiprimo, il programma viene valutato come completamente corretto, anche se ovviamente non funziona con numeri come 34 o 45. Ecco il codice:

#include <iostream>
#include <fstream>

using namespace std;
int N, res=-1;

int main(){
    ifstream fin("input.txt");
    ofstream fout("output.txt");
    cin>>N;
    if(N<2 || N%2==0) fout<<res;
	else {
        for(int i=2; i<=N; i++) {
            if(N%i==0){
                if(i==N) fout<<res;
                else {
                    fout<<i<<" "<<N/i;
                    break;
                }
            }
	}
    }
}