почему не выходит код из цикла

#include <iostream>
#include <cmath>
#include <string> 
#include <conio.h>
#include <windows.h>
#include <chrono>
#include <thread>

using namespace std;

int main() {
    int n, k, p;
    bool flag;
    setlocale(LC_ALL, "Russian");
    cout << "Введите N " << endl;
    cin >> n ;
    for ( p = 2; p < n; p++) {
        flag = true;
        k = 2;
        do
        {
            if (p > 3 && p % k == 0)
            {
                flag = false;
                k += 1;
            }
            else if (flag == true) {
                cout << p, "   ";
            }
        } while (flag  && k < p);
    }
 }

Ответы (1 шт):

Автор решения: Mikhailo

Из цикла for или из цикла while?

Наверное, из while, потому что в for все более-менее нормально, если только k не растет вместе с p.

А вот while странный. Представим, что при входе условие

if (p > 3 && p % k == 0)

не выполнено. Происходит вход во вторую ветку (flag ведь равен true), какой-то странный (если не сказать большего :)) вывод

cout << p, "   ";

Зачем после вывода p возвращать значение строки? Но это к делу не относится, а главное то, что при этом нет никаких изменений p и k, так что все остается неизменным и все опять повторяется сначала и без надежды на изменения.

→ Ссылка