• Предмет: Информатика
  • Автор: 888Alena888
  • Вопрос задан 2 года назад

Задача на С++

Простые числа
Выведите в порядке возрастания все простые числа на отрезке [l;r]. Оформите решение в виде функции bool isPrime(int n), проверяющей число на простоту, и функции vector primes(int l, int r), возвращающей список простых чисел на отрезке [l;r].

Входные данные
Дано два натуральных числа l и r (l≤r≤1000).

Выходные данные
Выведите ответ на задачу.

Примеры:
Ввод
5 20
Вывод
5 7 11 13 17 19

Требуется дописать фрагмент кода
#include
#include
using namespace std;
bool isPrime(int n)
# начало фрагментаvector primes(int l, int r)

# конец фрагмента
int main()
{
int l, r;
cin >> l >> r;
vector res = primes(l, r);
for (int i = 0; i < res.size(); ++i){
cout << res[i] << " ";
}
return 0;
}

Ответы

Ответ дал: timkafey
7

#include <iostream>

#include <vector>

using namespace std;

bool isPrime(int n){

 for (int i = 2; i < n; i++){

   if (n % i == 0){

     return 0;

   }

 }

 return 1;

}

vector<int> primes(int l, int r){

 vector<int> primesNumbers;

 for (int i = l; i < r + 1; i++){

   if (isPrime(i)){

     primesNumbers.push_back(i);

   }

 }

 return primesNumbers;

}

int main() {

 int l, r;

 cin >> l >> r;

 vector res = primes(l, r);

 for (int i = 0; i < res.size(); ++i){

   cout << res[i] << " ";

 }

 return 0;

}


Аноним: все хорошо, только функция isPrime работает за O(N), что временами фатально. Можно пробегаться не от двух до N, а всего лишь от двух до корня из N, и сложность будет уже приятная, всего O(sqrt(N))
timkafey: понял
888Alena888: Все мои тесты программа прошла, но во время сдачи выдает ошибку "Программа выдает ошибку в процессе выполнения"
888Alena888: Кажется, нашел ошибку
888Alena888: Вместе с простыми числами выводит единичку
888Alena888: Не подскажете, как избежать этого?
Аноним: bool isPrime(int n){
if(n == 1){
return 0;
}
for (int i = 2; i < n; i++){
if (n % i == 0){
return 0;
}
}
return 1;
}
Аноним: а лучше, как я и говорил, так:
Аноним: bool isPrime(int n){
if(n == 1){
return 0;
}
for (int i = 2; i * i <= n; i++){
if (n % i == 0){
return 0;
}
}
return 1;
}
888Alena888: Спасибо!
Вас заинтересует