Вопрос от Анонимного юзера 18 марта 2025 19:06
Напишите рекурсивную функцию, которая подсчитывает количество простых чисел, не превышающих заданное натуральное число x. На языке программирования C++ и используя пространство имён std, простой код с пояснениями
Ответ нейросети
18 марта 2025 19:06
Чтобы написать рекурсивную функцию на языке C++, которая подсчитывает количество простых чисел, не превышающих заданное натуральное число x, нужно сначала понять, что такое простое число. Простое число — это натуральное число больше 1, которое не имеет делителей, кроме 1 и самого себя.
Шаги для реализации:
Понять, что такое простое число:
- Простые числа начинаются с 2, и следующие простые числа: 3, 5, 7, 11, и так далее.
- Число считается простым, если оно не делится нацело ни на одно число, кроме 1 и самого себя.
Рекурсивная функция:
- Нам нужна функция, которая будет проверять каждое число от 2 до
x, чтобы определить, является ли оно простым. - Основная идея заключается в том, чтобы создать вспомогательную рекурсивную функцию, которая будет проверять, простое ли данное число, и так же считать количество простых чисел.
- Нам нужна функция, которая будет проверять каждое число от 2 до
Основная функция:
- Эта функция будет итерировать от 2 до
x, сверяя каждое число с вспомогательной функцией.
- Эта функция будет итерировать от 2 до
Вот код с пояснениями:
#include <iostream>
using namespace std;
// Вспомогательная рекурсивная функция для проверки, является ли n простым числом
bool isPrime(int n, int divisor = 2) {
// Если n меньше 2, оно не может быть простым
if (n < 2) return false;
// Если divisor достиг n, значит n - простое число
if (divisor * divisor > n) return true;
// Если n делится на divisor, оно не простое
if (n % divisor == 0) return false;
// Рекурсивный вызов, увеличивая делитель
return isPrime(n, divisor + 1);
}
// Рекурсивная функция, подсчитывающая количество простых чисел от 2 до x
int countPrimes(int x) {
// Базовый случай: если x меньше 2, простых чисел нет
if (x < 2) return 0;
// Рекурсивный случай: проверяем, является ли x простым
return (isPrime(x) ? 1 : 0) + countPrimes(x - 1);
}
int main() {
int x;
cout << "Введите натуральное число x: ";
cin >> x;
int count = countPrimes(x);
cout << "Количество простых чисел, не превышающих " << x << ": " << count << endl;
return 0;
}
Объяснение кода:
Функция
isPrime(int n, int divisor = 2):- Эта функция проверяет, является ли число
nпростым. - Она принимает число
nи делительdivisor, который по умолчанию равен 2. - Функция возвращает
false, еслиnменьше 2. - Если
divisor * divisorбольшеn, значит,nпростое. - Если
nделится наdivisor, тоnне является простым. - В противном случае функцией вызывается сама себя с увеличенным
divisor.
- Эта функция проверяет, является ли число
Функция
countPrimes(int x):- Эта функция подсчитывает количество простых чисел от
2доx. - Если
xменьше2, возвращается0. - В противном случае функция проверяет, является ли
xпростым, добавляет1(если да) и рекурсивно вызывает себя сx - 1.
- Эта функция подсчитывает количество простых чисел от
Функция
main():- Вводит значение
xи выводит количество простых чисел, не превышающихx.
- Вводит значение
Этот код является простым и удобным для понимания, а также иллюстрирует основу рекурсии и проверку простоты чисел.
Понравился ответ?
Задай свой вопрос
Напиши любую задачу или вопрос, а нейросеть её решит



