ФИПИ · ЕГЭ · все форматы ответа · 2475 заданий
Тип задачи: Делители, маски и отбор чисел.
| КЭС: | 3.4 Алгоритмы обработки натуральных чисел, записанных в позиционных системах счисления: разбиение записи числа на отдельные цифры, нахождение суммы и произведения цифр, нахождение максимальной (минимальной) цифры. Представление числа в виде набора простых сомножителей. Алгоритм быстрого возведения в степень. Поиск простых чисел в заданном диапазоне с помощью алгоритма «решето Эратосфена» |
| Тип ответа: | Краткий ответ |
Ответ: (351261495; 183235), (3212614035; 1675855), (3412614645; 1780185), (3712414275; 1936575), (3912414885; 2040905)
Решение.
Ищем все натуральные n, удовлетворяющие маске 3?12?14*5, ограничению n ≤ 10¹⁰ и делимости на 1917.
Каждый знак «?» заменяется ровно одной десятичной цифрой. Звёздочка допускает пустую строку и строки с нулями в начале: эти нули находятся внутри записи числа и должны сохраняться.
Без звёздочки в маске 8 позиций, из них 2 обозначены знаком «?». Граница 10¹⁰ отдельно проверяется по маске и ей не соответствует. Все остальные допустимые числа содержат не более 10 цифр.
Поэтому длина замены «*» принимает все целые значения от 0 до 2. При длине k имеется 10² · 10ᵏ подстановок.
Общее число подстановок: 100 + 1000 + 10000 = 11100.
Первый символ маски — фиксированная ненулевая цифра. Подстановки дают натуральные числа без ведущего нуля; различные наборы замен дают разные записи. Перебор длин и всех цифр охватывает каждое допустимое число.
Для каждого кандидата вычисляем частное и остаток при делении на 1917. Оставляем ровно те числа, у которых остаток равен нулю, затем упорядочиваем их по числовому значению.
Найденные числа и проверка каждой строки:
n = 351261495: значения «?» слева направо: 5, 6; «*» = «9».
1917 · 183235 = 351261495; остаток 0.
n = 3212614035: значения «?» слева направо: 2, 6; «*» = «03».
1917 · 1675855 = 3212614035; остаток 0.
n = 3412614645: значения «?» слева направо: 4, 6; «*» = «64».
1917 · 1780185 = 3412614645; остаток 0.
n = 3712414275: значения «?» слева направо: 7, 4; «*» = «27».
1917 · 1936575 = 3712414275; остаток 0.
n = 3912414885: значения «?» слева направо: 9, 4; «*» = «88».
1917 · 2040905 = 3912414885; остаток 0.
Проверены все 11100 подстановок и отдельно верхняя граница; найдено 5 подходящих чисел. Других замен маски в допустимом диапазоне нет.
Проверка результата.
Воспроизводимая программа Python:
from itertools import product
from fnmatch import fnmatchcase
mask = '3?12?14*5'
limit = 10 ** 10
divisor = 1917
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, справа частное.
351261495 — 183235
3212614035 — 1675855
3412614645 — 1780185
3712414275 — 1936575
3912414885 — 2040905
Ответ: (351261495; 183235), (3212614035; 1675855), (3412614645; 1780185), (3712414275; 1936575), (3912414885; 2040905).
Напишите пожелание к сайту или решению либо сообщите о найденной неточности в задании EGEINFA9F568.
Сообщение увидит только команда сайта: на странице оно не публикуется.
Комментарии к решению
Комментарии видны всем посетителям сайта.
Комментариев пока нет. Будьте первым.
Чтобы оставить комментарий, войдите или зарегистрируйтесь.