C/C++

Найти все простые числа в диапазоне от a до b

Найти все простые числа в диапазоне от a до b (диапазон вводится с клавиатуры), или сообщить, что в указанном диапазоне таких чисел нет.
Нужно использовать циклы if и else.
#include <iostream>
using namespace std;

bool is_simple(int& x) //проверка на простоту
{
if (x <= 1) return false; //если число 1 или меньше - не проверяем.
for (int i = 2; i <= (x>>1); i++) //делим число х на все числа от 2 до половины (x>>1 = x/2) от этого числа
if (!(x % i)) return false; //если делится без остатка возвращаем false
return true; //если возврата false не было, значит число простое, возвращаем true
}

int main()
{
setlocale(0, "");
int d_begin, d_end; //задаваемые границы
bool chek = true; //чекер для вывода "не найдено"
cout << "Введите дипазаон от и до\n";
cin >> d_begin >> d_end;
for (int x = d_begin; x <= d_end; x++) //начинаем проверку диапазона
{
if (is_simple(x)) //проверяем простое ли число
{
cout << x << " "; chek = false; //если да то выводим его и обнуляем чекер вывода "не найдено"
}
}
if (chek) cout << "Чисел не найдено.\n"; //если чекер не обнулялся, значит простых чисел не было, значит выводим эту надпись
}
Володя Гончаров
Володя Гончаров
51 416
Лучший ответ
Если числа a и b не очень большие (то есть где-то до 2³¹-1=2147483647, а диапазон [a;b] не очень широкий, то существенной оптимизации не требуется и поэтому можно так:
#include <cmath>
#include <iomanip>
#include <iostream>
using namespace std;
bool is_prime(int x)
{ if (x < 2) return false;
if (x == 2 || x == 3) return true;
if (x % 2 == 0) return false;
for (int i = 3; i <= ceil(sqrt(x)); i += 2)
if (x % i == 0) return false; return true; }
int main()
{ int a, b, c, d = 0; cout << "a b: "; cin >> a >> b;
for(c = a; c <= b; c++) if (is_prime(c))
{ cout << setw(11) << c; ++d; if (d == 10)
{ cout << endl; d = 0; } } }
Это для экрана шириной в 120 символов:

Похожие вопросы