Просто написать сегмент кода, который должен быть в рамке с красной каёмкой между bool isPrime(int n) и int main() ? Тут есть разные варианты и в первых двух ответах все функции работают правильно и не только до r=1000, но и когда r>1000. Ограничения не имеют принципиального характера и введены исключительно для удобства тестирования программы и для того, чтобы у кого-то не возникало желания чего-то тут особо оптимизировать. В оптимизации генератора простых чисел можно увязнуть и весьма надолго, а для чисел до 1000 включительно не нужно никакой оптимизации! И вот этот сегмент кода, который я особо и не изобретала, точно подойдёт:
{
if (n < 2) return false;
if (n == 2) return true;
if (n % 2 == 0) return false;
for (int i = 3; i * i <= n; i += 2)
if (n % i == 0) return false;
return true;
}
vector <int> primes(int l, int r)
{
vector <int> a;
for (int i = l; i <= r; i++)
if (isPrime(i)) a.push_back(i);
return a;
}
Чего тут, собственно, изобретать, когда в первых двух ответах обе функции почти один в один, особенно primes, a isPrime начинает цикл с тройки и идёт по нечётным числам до √n, что вполне грамотно? Но ещё тут, по-моему, сам исходный код требует срочного исправления. Почему пробельный символ в нём выводится как строка, а не как символ, и зачем вообще числа через пробел выводить? Чтобы получить такой вот ратотуй?

все остальные варианты не подходили)