no soy experto en java pero veo lo siguiente....
while((f<3)&(cl<3));
no deberias usar "&" sino "&&" ya que en java hasta donde recuerdo un & solo hace una operación en binario (por ejemplo 123 & 39 da 35)... en cambio && chequea el resultado y devuelve true o false... puede no se el factor pero nunca está de más hacelo bien porque ese "&" puede retornar valores inesperados (como null pointer exeption y locuras así...)
puedes poner algo como
}while((f<3)&(cl<3));
y ve si están avanzando apropiadamente f y cl
por otro lado este tipo de operaciones está bien, pero recomiendo colocarle sus llaves "{ }" para asegurarte que no te equivocas en el control de flujo
for(int x=1;x<num;x++)
if(num%x==0)
c++;
por ultimo creo que este es tu error
x<num
for(int x=1;x<num;x++)
if(num%x==0)
c++;
ya que si ingresaste 5, el revisará del 1 al 4 (x < 5) asi que en un numero primo, c solo será 1 y nunca 2
lo ultimo que puedes usar es... para saber si un numero es primo, solo debes probar con los números enteros menores a su raíz cuadrada (si es entero e igual, entonces obviamente no es primo) y no es necesario contar el 1...
prueba esos cambios y avisas... yo mañana reviso es tarde para mi D: (1:30am)