Ваш внутренний цикл не верен.Это не печать простых чисел, просто нечетные числа.Он проверяет, делится ли число на 2 во время первой итерации, и четное число всегда будет делимым.Таким образом, внутренний цикл всегда прерывается, если число четное, но печатает номер, если он нечетный, и продолжает это делать до тех пор, пока цикл не прекратится или не прекратится.
Давайте попробуем получить это на примере, внешний цикл равен 9. Внутренний цикл проверит, делится ли он на 2, так как он не распечатает число и продолжит снова.Следующая итерация проверит, делится ли она на 3, так как она вспыхнет.
И попробуйте использовать функцию, чтобы проверить, является ли число простым, что делает его более модульным.Вот немного оптимизированная версия ...
bool prime(int num)
{
int root = sqrt(num);
if(num == 2)
return true;
if(num%2 == 0)
return false;
for(int i=3;i<=root+1;i=i+2)
if(num % i == 0)
return false;
return true;
}