Задание №25 — Проверка делимости
Назовём маской числа последовательноеть цифр, в которой также могут встречаться следующие символы:
1) символ «?» означает ровно одну произвольную цифру;
2) символ «*» означает любую последовательность цифр произвольной длины; в том числе «*» может задавать и пустую последовательность.
Например, маске 123*4?5 соответствуют числа 123405 и 12300405.
Среди натуральных чисел, не превышающих 108, найдите все числа, соответствующие маске 11*223, делящиеся на 149 без остатка. В ответе запишите в первом столбце таблицы все найденные числа в порядке возрастания, а во втором столбце — соответствующие им результаты деления этих чисел на 149. Количество строк в таблице для ответа избыточно.
Правильный ответ
1166223 7827 11000223 73827 11149223 74827 11298223 75827 11447223 76827 11596223 77827 11745223 78827 11894223 79827
Пояснение
Решение:
Перебирать подряд все числа до не нужно: искомое число обязано делиться на 149, поэтому переберём сразу кратные — их всего , это мгновенно.
Проверку маски удобно поручить модулю fnmatch: в его шаблонах ? означает ровно один символ, а * — любую, в том числе пустую, последовательность символов, то есть ровно то, что написано в условии. Число превращаем в строку и сравниваем с маской 11*223.
from fnmatch import fnmatch
for k in range(1, 10 ** 8 // 149 + 1):
n = 149 * k
if fnmatch(str(n), '11*223'):
print(n, k)
Маска 11*223 означает: число начинается на 11, заканчивается на 223, а между ними стоит произвольное (возможно, пустое) количество цифр. Программа находит 8 чисел; в ответе они записываются по строкам таблицы — сначала число, потом частное.
| Число | Частное от деления на 149 |
|---|---|
| 1166223 | 7827 |
| 11000223 | 73827 |
| 11149223 | 74827 |
| 11298223 | 75827 |
| 11447223 | 76827 |
| 11596223 | 77827 |
| 11745223 | 78827 |
| 11894223 | 79827 |
Ответ: 1166223 7827 11000223 73827 11149223 74827 11298223 75827 11447223 76827 11596223 77827 11745223 78827 11894223 79827