Новая Школа - онлайн-школа подготовки к ЕГЭ
Задача Задача №3160116
А
Аноним
01 мая 2025 08:34 · публичный вопрос
А
Аноним

Описать функцию bool IsCorrect(int n1, int n2) для определения, является ли введенный пользователем интервал корректным. Описать функцию bool IsSimple(int n) для определения,…

Запрос пользователя

Описать функцию bool IsCorrect(int n1, int n2) для определения, является ли введенный пользователем интервал корректным. Описать функцию bool IsSimple(int n) для определения, является ли число простым. Описать функцию bool HasRep(int n) для опредедения, содержит ли число хотя бы две одинаковые цифры. Решить задачу с использованием разработанных функций: сколько простых чисел на интервале [а, b] содержат одинаковые цифры? Язык С++. Консоль. Windows.

Ответ нейросети
01 мая 2025 08:34

Давайте вместе разберем задачу и создадим необходимые функции на языке C++, а также решим поставленную задачу.


Пояснение условий задачи:

Нам нужно реализовать три функции:

  1. bool IsCorrect(int n1, int n2) — определить, является ли интервал корректным. Обычно интервал корректен, если n1 <= n2.

  2. bool IsSimple(int n) — проверить, является ли число простым.

  3. bool HasRep(int n) — проверить, содержит ли число хотя бы две одинаковые цифры.

После этого нужно посчитать, сколько чисел-простей на интервале [a, b], содержат одинаковые цифры.


Шаг 1: Реализация функции IsCorrect

Эта функция проверяет, что интервал корректен:

bool IsCorrect(int n1, int n2) {
    return n1 <= n2;
}

Шаг 2: Реализация функции IsSimple

Проверим, является ли число простым:

#include <cmath>

bool IsSimple(int n) {
    if (n < 2) return false; // 0 и 1 не являются простыми
    int sqrtN = static_cast<int>(sqrt(n));
    for (int i = 2; i <= sqrtN; ++i) {
        if (n % i == 0)
            return false;
    }
    return true;
}

Шаг 3: Реализация функции HasRep

Проверим, есть ли хотя бы две одинаковые цифры:

#include <set>

bool HasRep(int n) {
    std::set<int> digits;
    while (n > 0) {
        int digit = n % 10;
        if (digits.count(digit))
            return true; // нашли повтор
        digits.insert(digit);
        n /= 10;
    }
    return false;
}

Обработка числа 0: поскольку 0 — это число, у него одна цифра, повторов не будет, это корректно работает.


Шаг 4: Основная часть программы

Объявим интервал [a, b], и для каждого числа в диапазоне будем проверять условия: число простое и содержит повторяющиеся цифры. Подсчитываем количество таких чисел.

#include <iostream>

int main() {
    int a, b;
    std::cout << "Введите интервал [a, b]: ";
    std::cin >> a >> b;

    if (!IsCorrect(a, b)) {
        std::cout << "Некорректный интервал." << std::endl;
        return 1;
    }

    int count = 0;
    for (int num = a; num <= b; ++num) {
        if (IsSimple(num) && HasRep(num))
            ++count;
    }

    std::cout << "Количество простых чисел на интервале [" << a << ", " << b << "] с одинаковыми цифрами: " << count << std::endl;

    return 0;
}

Итог: полный пример кода

#include <iostream>
#include <cmath>
#include <set>

bool IsCorrect(int n1, int n2) {
    return n1 <= n2;
}

bool IsSimple(int n) {
    if (n < 2) return false;
    int sqrtN = static_cast<int>(sqrt(n));
    for (int i = 2; i <= sqrtN; ++i) {
        if (n % i == 0)
            return false;
    }
    return true;
}

bool HasRep(int n) {
    std::set<int> digits;
    if (n == 0) return false; // число 0 не имеет повторов
    while (n > 0) {
        int digit = n % 10;
        if (digits.count(digit))
            return true;
        digits.insert(digit);
        n /= 10;
    }
    return false;
}

int main() {
    int a, b;
    std::cout << "Введите интервал [a, b]: ";
    std::cin >> a >> b;

    if (!IsCorrect(a, b)) {
        std::cout << "Некорректный интервал." << std::endl;
        return 1;
    }

    int count = 0;
    for (int num = a; num <= b; ++num) {
        if (IsSimple(num) && HasRep(num))
            ++count;
    }

    std::cout << "Количество простых чисел на интервале [" << a << ", " << b << "] с одинаковыми цифрами: " << count << std::endl;

    return 0;
}

Если есть дополнительные вопросы или нужно что-то уточнить — обращайтесь!