Zupełnie nierozumiem twoich pytań, przecież obie wersje twoich programów są [OBYDWIE WERSJE] bardzo dobre i nie rozumiem co ci się tam sypie?
Pierwsza wersja dokładnie typuje liczby pierwsze i nie-pierwsze w zakresie od 0 do 120, a potem już troszeczkę mniej dokładnie - czasami zdarza mu [twojemu programowi]nieznacznie się pomylić.
Co do drugiej wersji, jest dokładnie tak samo [więc co tu się sypie]. Różnica jest tylko taka [malutka], że zakres dokładności skurczył się jakoś magicznie do 2 - 10. Powyżej tego zakresu [tak mi się wydaje, chociaż nie testowałem, a tylko tak sądzę] twój program nie widzi liczb pierwszych.
Czyli można by [w drugim przypadku] napisać w środku pętli po prostu:
if ( a == 2 || a == 3 || a == 5 || a == 7 || a == 0 || a == 1)
cout << "TAK" << endl;
else
cout << "NIE" << endl;
i dostaniemy dokładnie takie same wyniki, jak twoim drugim programem, czyż nie?
PS
Gdybyś choć trochę dokładniej poczytał ten wątek - było już o tym wcześniej pisane. Lub gdybyś trochę rozszerzył zakres testowania ...