ФИПИ · ЕГЭ · все форматы ответа · 2475 заданий
Тип задачи: Делители, маски и отбор чисел.
| КЭС: | 3.4 Алгоритмы обработки натуральных чисел, записанных в позиционных системах счисления: разбиение записи числа на отдельные цифры, нахождение суммы и произведения цифр, нахождение максимальной (минимальной) цифры. Представление числа в виде набора простых сомножителей. Алгоритм быстрого возведения в степень. Поиск простых чисел в заданном диапазоне с помощью алгоритма «решето Эратосфена» |
| Тип ответа: | Краткий ответ |
Ответ: (8901677598; 901527), (8905627198; 901927), (8912617990; 902635), (8941667298; 905577), (8952607690; 906685), (8970607992; 908508), (8988647790; 910335)
Решение.
Ищем все натуральные n, удовлетворяющие маске 89*6?7?9?, ограничению n ≤ 10¹⁰ и делимости на 9874.
Каждый знак «?» заменяется ровно одной десятичной цифрой. Звёздочка допускает пустую строку и строки с нулями в начале: эти нули находятся внутри записи числа и должны сохраняться.
Без звёздочки в маске 8 позиций, из них 3 обозначены знаком «?». Граница 10¹⁰ отдельно проверяется по маске и ей не соответствует. Все остальные допустимые числа содержат не более 10 цифр.
Поэтому длина замены «*» принимает все целые значения от 0 до 2. При длине k имеется 10³ · 10ᵏ подстановок.
Общее число подстановок: 1000 + 10000 + 100000 = 111000.
Первый символ маски — фиксированная ненулевая цифра. Подстановки дают натуральные числа без ведущего нуля; различные наборы замен дают разные записи. Перебор длин и всех цифр охватывает каждое допустимое число.
Для каждого кандидата вычисляем частное и остаток при делении на 9874. Оставляем ровно те числа, у которых остаток равен нулю, затем упорядочиваем их по числовому значению.
Найденные числа и проверка каждой строки:
n = 8901677598: значения «?» слева направо: 7, 5, 8; «*» = «01».
9874 · 901527 = 8901677598; остаток 0.
n = 8905627198: значения «?» слева направо: 2, 1, 8; «*» = «05».
9874 · 901927 = 8905627198; остаток 0.
n = 8912617990: значения «?» слева направо: 1, 9, 0; «*» = «12».
9874 · 902635 = 8912617990; остаток 0.
n = 8941667298: значения «?» слева направо: 6, 2, 8; «*» = «41».
9874 · 905577 = 8941667298; остаток 0.
n = 8952607690: значения «?» слева направо: 0, 6, 0; «*» = «52».
9874 · 906685 = 8952607690; остаток 0.
n = 8970607992: значения «?» слева направо: 0, 9, 2; «*» = «70».
9874 · 908508 = 8970607992; остаток 0.
n = 8988647790: значения «?» слева направо: 4, 7, 0; «*» = «88».
9874 · 910335 = 8988647790; остаток 0.
Проверены все 111000 подстановок и отдельно верхняя граница; найдено 7 подходящих чисел. Других замен маски в допустимом диапазоне нет.
Проверка результата.
Воспроизводимая программа Python:
from itertools import product
from fnmatch import fnmatchcase
mask = '89*6?7?9?'
limit = 10 ** 10
divisor = 9874
fixed = len(mask.replace('*', ''))
lengths = range(10 - fixed + 1) if '*' in mask else [0]
numbers = set()
for length in lengths:
pattern = mask.replace('*', '?' * length)
for digits in product('0123456789', repeat=pattern.count('?')):
it = iter(digits)
text = ''.join(next(it) if c == '?' else c for c in pattern)
numbers.add(int(text))
if fnmatchcase(str(limit), mask):
numbers.add(limit)
for n in sorted(numbers):
quotient, remainder = divmod(n, divisor)
if remainder == 0:
print(n, quotient)Результат: в каждой строке слева n, справа частное.
8901677598 — 901527
8905627198 — 901927
8912617990 — 902635
8941667298 — 905577
8952607690 — 906685
8970607992 — 908508
8988647790 — 910335
Ответ: (8901677598; 901527), (8905627198; 901927), (8912617990; 902635), (8941667298; 905577), (8952607690; 906685), (8970607992; 908508), (8988647790; 910335).
Напишите пожелание к сайту или решению либо сообщите о найденной неточности в задании EGEINF57CFD7.
Сообщение увидит только команда сайта: на странице оно не публикуется.
Комментарии к решению
Комментарии видны всем посетителям сайта.
Комментариев пока нет. Будьте первым.
Чтобы оставить комментарий, войдите или зарегистрируйтесь.