Masz błąd, dla 9 pokazuje, że jest pierwsza. To, że jest pierwsza, możesz stwierdzić dopiero po przejściu całej pętli, gdy nie znalazła dzielnika. (W pierwszym przejściu pętli stwierdzasz, że 9 nie dzieli się przez 2(pierwsza wartość i), więc jest liczbą pierwszą, co jest nieprawdą)
Kolejny błąd to wypisywanie ile razy wykonała się pętla. Wypisujesz o jeden za dużo razy.
A nie działa dla liczb mniejszych od 5 4 ponieważ najmniejsza możliwa zmiennej i jest równa 2, i warunek w forze jest wtedy niespełniony (2*2 <= coś_mniejsze_od_54 jest nieprawdziwe). Ponieważ są to tylko 3 2 liczby (2, 3, 4) możesz zrobić dla nich wyjątek.
Znalazłem jeszcze jeden błąd warunek w forze powinien być i*i < = liczba, bo co w przypadku gdy liczba/i = i r.0
int i;
for (i = 2; i * i <= liczba; i++) {
if (liczba % i == 0) {
std::cout << "nie jest pierwsza!"
<< "\n";
std::cout << "petla wykonala sie " << i-1 << " razy"
<< std::endl;
return 0;
}
}
std::cout << "jest pierwsza!"
<< "\n";
std::cout << "petla wykonala sie " << i-2 << " razy"
<< std::endl;