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

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

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

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

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

Давайте разберем задачу по шагам и подготовим необходимый код на языке C++.

Шаг 1: Описание функций

  1. bool IsCorrect(int n1, int n2):
    Эта функция должна проверить, является ли интервал корректным. Обычно интервал считается корректным, если n1 меньше или равно n2.

  2. bool IsSimple(int n):
    Эта функция определит, является ли число простым. Простое число — это число больше 1, делящееся только на 1 и само на себя.

  3. bool IsAscend(int n):
    Эта функция проверит, является ли последовательность цифр числа возрастающей. Например, 1349 — да, 132 — нет.

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

#include <iostream>
#include <cmath>

using namespace std;

// Проверка интервала на корректность
bool IsCorrect(int n1, int n2) {
    return n1 <= n2;
}

// Проверка, является ли число простым
bool IsSimple(int n) {
    if (n <= 1) return false;
    for (int i = 2; i <= sqrt(n); ++i) {
        if (n % i == 0) return false;
    }
    return true;
}

// Проверка, являются ли цифры числа строго возрастающими
bool IsAscend(int n) {
    int prev_digit = 10; // максимальная цифра больше любой цифры
    while (n > 0) {
        int digit = n % 10;
        if (digit >= prev_digit) return false;
        prev_digit = digit;
        n /= 10;
    }
    return true;
}

Обратите внимание, что проверка IsAscend идет с конца числа, поэтому цифры проверяются в обратном порядке. Чтобы проверить в правильном порядке (с старших разрядов), лучше сначала сохранить цифры в массив или строку, или изменить метод проверки.

Вот исправленная версия IsAscend, которая проверяет начиная с самой старшей цифры:

#include <string>
#include <algorithm>

// Проверка, что цифры числа возрастающие слева направо
bool IsAscend(int n) {
    string s = to_string(n);
    for (size_t i = 1; i < s.size(); ++i) {
        if (s[i] <= s[i - 1]) {
            return false;
        }
    }
    return true;
}

Теперь функция правильнее.

Шаг 3: Основная часть — подсчет подходящих чисел

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

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

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

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

    cout << "Количество простых чисел с возрастающей последовательностью цифр в диапазоне [" << a << ", " << b << "]: " << count << endl;

    return 0;
}

Итоговая программа:

#include <iostream>
#include <cmath>
#include <string>

using namespace std;

// Проверка интервала
bool IsCorrect(int n1, int n2) {
    return n1 <= n2;
}

// Проверка, что число простое
bool IsSimple(int n) {
    if (n <= 1) return false;
    for (int i = 2; i <= sqrt(n); ++i) {
        if (n % i == 0) return false;
    }
    return true;
}

// Проверка, что цифры числа возрастающие
bool IsAscend(int n) {
    string s = to_string(n);
    for (size_t i = 1; i < s.size(); ++i) {
        if (s[i] <= s[i - 1]) {
            return false;
        }
    }
    return true;
}

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

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

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

    cout << "Количество простых чисел с возрастающей последовательностью цифр в диапазоне [" << a << ", " << b << "]: " << count << endl;

    return 0;
}

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