Предмет: Информатика, автор: EN0Tymnik

информатика 10класс 25б

На вход передаётся 2 натуральных числа a и b, не превышающих 65536.

Необходимо вывести через пробел все простые числа, заключённые в промежутке между a и b.

Пример:

Ввод:

11 32

Ответ:

13 17 19 23 29 31


asv40707: вы хотите тупым перебором или решетом Эратосфена?
asv40707: Вроде поменял, попробуйте опять послать

Ответы

Автор ответа: asv40707
1

Ответ:

Решето Эратосфена

Объяснение:

#define _CRT_SECURE_NO_WARNINGS

#include <iostream>

#include <cstdio>

using namespace std;

int pr[1000077];

int main()

{

#ifdef _DEBUG

//freopen("input.txt", "r", stdin);

#endif // _DEBUG

int a, b;

cin >> a >> b;

if (a > b)

{

 swap(a, b);

}

for (int i = 2; i <= b; i++)

{

 if (pr[i] == 2)

 {

  continue;

 }

 pr[i] = 1;

 for (int j = i + i; j <= b; j += i)

 {

  pr[j] = 2;

 }

}

for (int i = a + 1; i < b; i++)

{

 if (pr[i] == 1)

 {

  cout << i << ' ';

 }

}

}


asv40707: стойте, какой вердикт выдаёт
asv40707: wa?
asv40707: понял в чём может быть ошибка
asv40707: после считывания a и b добавьте
asv40707: if (a > b)
{
swap(a, b);
}
asv40707: всё, поменял, не заметил, что там не включительно
asv40707: отпишитесь, какой вердикт выдаст
asv40707: мне так стыдно, что сначала неправильный код написал
EN0Tymnik: благодарю,теперь верно.)
asv40707: круто
Похожие вопросы
Предмет: Английский язык, автор: 22822148