Даю 100 баллов на C++ надо написать программу. Задание с Сириуса: Выведите в порядке возрастания все простые числа на отрезке [l;r]. Оформите решение в виде функции bool isPrime(int n), проверяющей число на простоту, и функции vector primes(int l, int r), возвращающей список простых чисел на отрезке [l;r]. Входные данные: Дано два натуральных числа l и r (l≤r≤1000).
#include
#include
using namespace std;
bool isPrime(int n)
/* ВАШ КОД */
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;
}
Вот мой фрагмент кода который валится на 3-ем тесте:
{
for(int i = 2; i <= n / 2; i++){
if(!(n % i)){
return 0;
}
}
return 1;
}
vector primes(int l, int r){
vector A;
for(int i = l; i <= r; i++){
if(isPrime(i)){
A.push_back(i);
}
}
return A;
}
Информатика 10 класс Программирование C++ программа простые числа функция isPrime функция primes отрезок [l;r] натуральные числа алгоритм проверки простоты вывод простых чисел решение задачи код на C++ тестирование программы Новый
Для решения задачи по нахождению простых чисел на отрезке [l; r] необходимо правильно реализовать функции isPrime и primes. Давайте разберем каждую из них и исправим ошибки в вашем коде.
1. Функция isPrime
Функция isPrime должна проверять, является ли число простым. Простое число - это натуральное число больше 1, которое не имеет делителей, кроме 1 и самого себя. В вашем коде есть ошибка: функция возвращает 0 (ложь) для простых чисел. Правильная реализация должна выглядеть следующим образом:
bool isPrime(int n) { if (n <= 1) return false; // Числа меньше или равные 1 не простые for (int i = 2; i * i <= n; i++) { // Проверяем делители до корня из n if (n % i == 0) return false; // Если n делится на i, то не простое } return true; // Если не нашли делителей, то n простое }
2. Функция primes
Функция primes должна возвращать вектор простых чисел на заданном отрезке. Ваша реализация в целом верная, но давайте убедимся, что она использует исправленную функцию isPrime:
vectorprimes(int l, int r) { vector A; // Создаем вектор для хранения простых чисел for (int i = l; i <= r; i++) { // Проходим по всем числам от l до r if (isPrime(i)) { // Если число простое A.push_back(i); // Добавляем его в вектор } } return A; // Возвращаем вектор простых чисел }
3. Основная функция main
Теперь, когда функции определены, ваша основная функция main должна выглядеть следующим образом:
#include#include using namespace std; bool isPrime(int n) { if (n <= 1) return false; for (int i = 2; i * i <= n; i++) { if (n % i == 0) return false; } return true; } vector primes(int l, int r) { vector A; for (int i = l; i <= r; i++) { if (isPrime(i)) { A.push_back(i); } } return A; } 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; }
Теперь программа должна корректно работать для всех тестов, включая третий. Убедитесь, что вы правильно вводите значения l и r, и программа выведет все простые числа на заданном отрезке в порядке возрастания.