На вход подаётся четырёхзначное натуральное число. Выведите наибольшее простое число, которое можно составить из цифр введенного числа не переставляя их порядок. Если из цифр невозможно составить натуральное число или введено не четырёхзначное натуральное число, то выводится цифра 0. Например, из числа 1737 можно выделить несколько простых чисел 1737-17,1737-7,1737-3, 1737-73, 1737-37, 1737-173, Программа не должна выводить цичего кроме требуемого
Кратко: нужно перебрать все непустые подпоследовательности цифр введённого четырехзначного числа, сохраняя порядок цифр, каждую подпоследовательность преобразовать в целое число, проверить, простое ли оно, и выбрать наибольшее простое. Если простых чисел нет или вход не четырёхзначное, вывести 0.
Как решить пошагово
1) Проверка входа
- Вход должен быть натуральным числом из четырёх цифр (от 1000 до 9999). Иначе сразу выводим 0.
2) Получение цифр
- Разделяем число на цифры слева направо: d0, d1, d2, d3.
3) Перебор всех подпоследовательностей
- Есть 2^4 − 1 = 15 непустых подпоследовательностей. Перебираем их с помощью битовой маски mask от 1 до 15.
- Для каждого i от 0 до 3, если в маске бит i установлен, добавляем цифру di в текущую последовательность (чтобы порядок сохранялся).
- Преобразуем полученную последовательность цифр в целое число x (используем int, чтобы игнорировать возможные ведущие нули).
4) Проверка простоты
- Для каждого полученного x больше 1 проверяем делимость на все числа от 2 до floor(sqrt(x)).
- Если x простое и больше текущего максимального найденного простого, запоминаем его.
5) Вывод результата
- Если был найден хотя бы один простой число, выводим наибольшее найденное. Иначе выводим 0.
Псевдокод (для ясности)
- если не четырехзначное натуральное число: вывести 0
- digits = список цифр числа (д0, д1, д2, д3)
- max_prime = 0
- для mask в диапазоне 1..15:
- цепочка = пустая
- для i в 0..3:
- если (mask >> i) & 1: добавить digits[i] в цепочку
- x = int(цепочка)
- если x > 1 и is_prime(x) и x > max_prime: max_prime = x
- вывести max_prime (если max_prime == 0, выводим 0)
Функция проверки простоты is_prime(n)
- если n <= 1: вернуть false
- для t от 2 до floor(sqrt(n)):
- если n % t == 0: вернуть false
- вернуть true
Рабочий пример на входе 1737
- цифры: 1, 7, 3, 7
- все непустые подпоследовательности дают такие числа: 1, 7, 3, 7, 17, 13, 17, 73, 77, 37, 173, 177, 137, 737, 1737
- простые среди них: 7, 3, 17, 13, 73, 37, 173, 137, ...
- из них наибольшее простое — 173
- итоговый вывод: 173
Дополнительные заметки
- Ввод типа 4 цифры с возможными нулями во внутренности тоже корректен: ведущие нули в подпоследовательности просто дают числу соответствующее значение (например, подпоследовательность 0,2, можно получить число 2).
- Общее число проверяемых значений всегда равно 15 для четырех цифр, поэтому решение работает быстро даже на школьной практике.
Если хочешь, могу привести конкретную реализацию на языке Python или другом языке по твоему выбору.