Давайте разберем задачу по шагам и подготовим необходимый код на языке C++.
Шаг 1: Описание функций
bool IsCorrect(int n1, int n2):
Эта функция должна проверить, является ли интервал корректным. Обычно интервал считается корректным, если n1 меньше или равно n2.
bool IsSimple(int n):
Эта функция определит, является ли число простым. Простое число — это число больше 1, делящееся только на 1 и само на себя.
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;
}
Если есть дополнительные вопросы — обращайтесь!