25. Обработка целочисленной информации: маска числа
Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы:
- символ «?» означает ровно одну произвольную цифру;
- символ «» означает любую последовательность цифр произвольной длины; в том числе «» может задавать и пустую последовательность.
Например, маске $123*4?5$ соответствуют числа $123405$ и $12300405$.
Среди натуральных чисел, не превышающих $10^8$, найдите все числа, соответствующие маске $1*23?9$, делящиеся на $2023$ без остатка.
В ответе запишите в первом столбце таблицы все найденные числа в порядке возрастания, а во втором столбце – соответствующие результаты деления этих чисел на $2023$.
| | |
Так как нужны только числа, делящиеся на $2023$, будем перебирать не все числа до $10^8$, а только кратные $2023$.
Для проверки соответствия маске удобно использовать функцию fnmatch.
from fnmatch import fnmatch
for x in range(2023, 10**8 + 1, 2023):
if fnmatch(str(x), '1*23?9'):
print(x, x // 2023)
Функция fnmatch проверяет, соответствует ли запись числа заданной маске:
? — одна произвольная цифра;* — любое количество цифр, в том числе $0$.
Программа выведет:
| $1442399$ | $713$ |
| $11112339$ | $5493$ |
| $12872349$ | $6363$ |
| $14632359$ | $7233$ |
| $16392369$ | $8103$ |
| $18152379$ | $8973$ |
| $19912389$ | $9843$ |
Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы:
- символ «?» означает ровно одну произвольную цифру;
- символ «» означает любую последовательность цифр произвольной длины; в том числе «» может задавать и пустую последовательность.
Например, маске $123*4?5$ соответствуют числа $123405$ и $12300405$.
Среди натуральных чисел, не превышающих $10^9$, найдите все числа, соответствующие маске $1234?57?8$, делящиеся на число $19$ без остатка.
В ответе запишите в первом столбце таблицы все найденные числа в порядке возрастания, а во втором столбце – соответствующие им результаты деления этих чисел на $19$.
| | |
В маске $1234?57?8$ находятся два символа ?, каждый из которых обозначает одну произвольную цифру. Поэтому достаточно перебрать по $10$ вариантов для каждой неизвестной цифры, то есть всего $100$ чисел.
for a in range(10):
for b in range(10):
x = int(f'1234{a}57{b}8')
if x % 19 == 0:
print(x, x // 19)
Переменные a и b принимают значения от $0$ до $9$ и подставляются вместо символов ?. Для каждого полученного числа проверяем делимость на $19$.
Программа выведет:
| Число | Результат деления на $19$ |
|---|---|
| $123405798$ | $6495042$ |
| $123425748$ | $6496092$ |
| $123455768$ | $6497672$ |
| $123475718$ | $6498722$ |
| $123485788$ | $6499252$ |
Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы:
- символ «?» означает ровно одну произвольную цифру;
- символ «» означает любую последовательность цифр произвольной длины; в том числе «» может задавать и пустую последовательность.
Например, маске $123*4?5$ соответствуют числа $123405$ и $12300405$.
Среди натуральных чисел, не превышающих $10^{10}$, найдите все числа, соответствующие маске $3?12?14*5$, делящиеся на $1917$ без остатка.
В ответе запишите в первом столбце таблицы все найденные числа в порядке возрастания, а во втором столбце – соответствующие им результаты деления этих чисел на $1917$.
| | |
Так как нужны только числа, делящиеся на $1917$, будем перебирать не все числа до $10^{10}$, а только кратные $1917$.
Для проверки соответствия маске удобно использовать функцию fnmatch.
from fnmatch import fnmatch
for x in range(1917, 10**10 + 1, 1917):
if fnmatch(str(x), '3?12?14*5'):
print(x, x // 1917)
Функция fnmatch проверяет, соответствует ли запись числа заданной маске:
? — одна произвольная цифра;* — любое количество цифр, в том числе $0$.
Программа выведет:
| Число | Результат деления на $1917$ |
|---|---|
| $351261495$ | $183235$ |
| $3212614035$ | $1675855$ |
| $3412614645$ | $1780185$ |
| $3712414275$ | $1936575$ |
| $3912414885$ | $2040905$ |
Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы:
- символ «?» означает ровно одну произвольную цифру;
- символ «» означает любую последовательность цифр произвольной длины; в том числе «» может задавать и пустую последовательность.
Например, маске $123*4?5$ соответствуют числа $123405$ и $12300405$.
Среди натуральных чисел, не превышающих $10^9$, найдите все числа, соответствующие маске $12345?7?8$, делящиеся на число $23$ без остатка.
В ответе запишите в первом столбце таблицы все найденные числа в порядке возрастания, а во втором столбце – соответствующие им результаты деления этих чисел на $23$.
| | |
В маске $12345?7?8$ находятся два символа ?, каждый из которых обозначает одну произвольную цифру. Поэтому переберём все возможные значения этих двух цифр и проверим полученные числа на делимость на $23$.
for a in range(10):
for b in range(10):
x = int(f'12345{a}7{b}8')
if x % 23 == 0:
print(x, x // 23)
Переменные a и b принимают значения от $0$ до $9$ и подставляются вместо символов ?.
Условие x % 23 == 0 проверяет, делится ли полученное число на $23$ без остатка.
Программа выведет:
| Число | Результат деления на $23$ |
|---|---|
| $123450798$ | $5367426$ |
| $123451718$ | $5367466$ |
| $123453788$ | $5367556$ |
| $123454708$ | $5367596$ |
| $123456778$ | $5367686$ |
| $123459768$ | $5367816$ |
Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы:
- символ «?» означает ровно одну произвольную цифру;
- символ «» означает любую последовательность цифр произвольной длины; в том числе «» может задавать и пустую последовательность.
Например, маске $123*4?5$ соответствуют числа $123405$ и $12300405$.
Среди натуральных чисел, не превышающих $10^8$, найдите все числа, соответствующие маске $2*1?71$, делящиеся на $1991$ без остатка.
В ответе запишите в первом столбце таблицы все найденные числа в порядке возрастания, а во втором столбце – соответствующие результаты деления этих чисел на $1991$.
| | |
Так как нужны только числа, делящиеся на $1991$, будем перебирать не все числа до $10^8$, а только кратные $1991$.
Для проверки соответствия маске удобно использовать функцию fnmatch.
from fnmatch import fnmatch
for x in range(1991, 10**8 + 1, 1991):
if fnmatch(str(x), '2*1?71'):
print(x, x // 1991)
Функция fnmatch проверяет, соответствует ли запись числа заданной маске:
? — одна произвольная цифра;* — любое количество цифр, в том числе $0$.
Программа выведет:
| Число | Результат деления на $1991$ |
|---|---|
| $2351371$ | $1181$ |
| $20071271$ | $10081$ |
| $22261371$ | $11181$ |
| $24451471$ | $12281$ |
| $26641571$ | $13381$ |
| $28831671$ | $14481$ |
Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы:
- символ «?» означает ровно одну произвольную цифру;
- символ «» означает любую последовательность цифр произвольной длины; в том числе «» может задавать и пустую последовательность.
Например, маске $123*4?5$ соответствуют числа $123405$ и $12300405$.
Среди натуральных чисел, не превышающих $10^8$, найдите все числа, соответствующие маске $12??15*6$, делящиеся на $273$ без остатка.
В ответе запишите в первом столбце таблицы все найденные числа в порядке возрастания, а во втором столбце – соответствующие им результаты деления этих чисел на $273$.
| | |
Так как нужны только числа, делящиеся на $273$, будем перебирать не все числа до $10^8$, а только кратные $273$.
Для проверки соответствия маске удобно использовать функцию fnmatch.
from fnmatch import fnmatch
for x in range(273, 10**8 + 1, 273):
if fnmatch(str(x), '12??15*6'):
print(x, x // 273)
Функция fnmatch проверяет, соответствует ли запись числа заданной маске:
? — одна произвольная цифра;* — любое количество цифр, в том числе $0$.
Программа выведет:
| Число | Результат деления на $273$ |
|---|---|
| $1248156$ | $4572$ |
| $12801516$ | $46892$ |
| $12831546$ | $47002$ |
| $12861576$ | $47112$ |
Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы:
- символ «?» означает ровно одну произвольную цифру;
- символ «» означает любую последовательность цифр произвольной длины; в том числе «» может задавать и пустую последовательность.
Например, маске $123*4?5$ соответствуют числа $123405$ и $12300405$.
Среди натуральных чисел, не превышающих $10^8$, найдите все числа, соответствующие маске $1?3*4?9$, делящиеся на $1927$ без остатка.
В ответе запишите в первом столбце таблицы все найденные числа в порядке возрастания, а во втором столбце – соответствующие результаты деления этих чисел на $1927$.
| | |
Так как нужны только числа, делящиеся на $1927$, будем перебирать не все числа до $10^8$, а только кратные $1927$.
Для проверки соответствия маске удобно использовать функцию fnmatch.
from fnmatch import fnmatch
for x in range(1927, 10**8 + 1, 1927):
if fnmatch(str(x), '1?3*4?9'):
print(x, x // 1927)
Функция fnmatch проверяет, соответствует ли запись числа заданной маске:
? — одна произвольная цифра;* — любое количество цифр, в том числе $0$.
Программа выведет:
| Число | Результат деления на $1927$ |
|---|---|
| $1439469$ | $747$ |
| $10361479$ | $5377$ |
| $15352409$ | $7967$ |
| $16354449$ | $8487$ |
| $17356489$ | $9007$ |
Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы:
- символ «?» означает ровно одну произвольную цифру;
- символ «» означает любую последовательность цифр произвольной длины; в том числе «» может задавать и пустую последовательность.
Например, маске $123*4?5$ соответствуют числа $123405$ и $12300405$.
Среди натуральных чисел, не превышающих $10^9$, найдите все числа, соответствующие маске $12345?7?8$, делящиеся на число $37$ без остатка.
В ответе запишите в первом столбце таблицы все найденные числа в порядке возрастания, а во втором столбце – соответствующие им результаты деления этих чисел на $37$.
| | |
В маске $12345?7?8$ находятся два символа ?, каждый из которых обозначает одну произвольную цифру. Поэтому переберём все возможные значения этих двух цифр и проверим полученные числа на делимость на $37$.
for a in range(10):
for b in range(10):
x = int(f'12345{a}7{b}8')
if x % 37 == 0:
print(x, x // 37)
Переменные a и b принимают значения от $0$ до $9$ и подставляются вместо символов ?.
Условие x % 37 == 0 проверяет, делится ли полученное число на $37$ без остатка.
Программа выведет:
| Число | Результат деления на $37$ |
|---|---|
| $123451758$ | $3336534$ |
| $123454718$ | $3336614$ |
| $123458788$ | $3336724$ |
Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы:
- символ «?» означает ровно одну произвольную цифру;
- символ «» означает любую последовательность цифр произвольной длины; в том числе «» может задавать и пустую последовательность.
Например, маске $123*4?5$ соответствуют числа $123405$ и $12300405$.
Среди натуральных чисел, не превышающих $10^{10}$, найдите все числа, соответствующие маске $89*6?7?9?$, делящиеся на $9874$ без остатка.
В ответе запишите в первом столбце таблицы все найденные числа в порядке возрастания, а во втором столбце – соответствующие им результаты деления этих чисел на $9874$.
| | |
Так как нужны только числа, делящиеся на $9874$, будем перебирать не все числа до $10^{10}$, а только кратные $9874$.
Для проверки соответствия маске удобно использовать функцию fnmatch.
from fnmatch import fnmatch
for x in range(9874, 10**10 + 1, 9874):
if fnmatch(str(x), '89*6?7?9?'):
print(x, x // 9874)
Функция fnmatch проверяет, соответствует ли запись числа заданной маске:
? — одна произвольная цифра;* — любое количество цифр, в том числе $0$.
Программа выведет:
| Число | Результат деления на $9874$ |
|---|---|
| $8901677598$ | $901527$ |
| $8905627198$ | $901927$ |
| $8912617990$ | $902635$ |
| $8941667298$ | $905577$ |
| $8952607690$ | $906685$ |
| $8970607992$ | $908508$ |
| $8988647790$ | $910335$ |
Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы:
- символ «?» означает ровно одну произвольную цифру;
- символ «» означает любую последовательность цифр произвольной длины; в том числе «» может задавать и пустую последовательность.
Например, маске $123*4?5$ соответствуют числа $123405$ и $12300405$.
Среди натуральных чисел, не превышающих $10^8$, найдите все числа, соответствующие маске $2*1?5?1$, делящиеся на $1921$ без остатка.
В ответе запишите в первом столбце таблицы все найденные числа в порядке возрастания, а во втором столбце – соответствующие результаты деления этих чисел на $1921$.
| | |
Так как нужны только числа, делящиеся на $1921$, будем перебирать не все числа до $10^8$, а только кратные $1921$.
Для проверки соответствия маске удобно использовать функцию fnmatch.
from fnmatch import fnmatch
for x in range(1921, 10**8 + 1, 1921):
if fnmatch(str(x), '2*1?5?1'):
print(x, x // 1921)
Функция fnmatch проверяет, соответствует ли запись числа заданной маске:
? — одна произвольная цифра;* — любое количество цифр, в том числе $0$.
Программа выведет:
| Число | Результат деления на $1921$ |
|---|---|
| $2710531$ | $1411$ |
| $22016581$ | $11461$ |
| $23015501$ | $11981$ |
| $23111551$ | $12031$ |
| $27318541$ | $14221$ |
| $27414591$ | $14271$ |
| $28413511$ | $14791$ |
Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы:
- символ «?» означает ровно одну произвольную цифру;
- символ «» означает любую последовательность цифр произвольной длины; в том числе «» может задавать и пустую последовательность.
Например, маске $123*4?5$ соответствуют числа $123405$ и $12300405$.
Среди натуральных чисел, не превышающих $10^9$, найдите все числа, соответствующие маске $1234?57?8$, делящиеся на число $17$ без остатка.
В ответе запишите в первом столбце таблицы все найденные числа в порядке возрастания, а во втором столбце – соответствующие им результаты деления этих чисел на $17$.
| | |
В маске $1234?57?8$ находятся два символа ?, каждый из которых обозначает одну произвольную цифру. Поэтому переберём все возможные значения этих двух цифр и проверим полученные числа на делимость на $17$.
for a in range(10):
for b in range(10):
x = int(f'1234{a}57{b}8')
if x % 17 == 0:
print(x, x // 17)
Переменные a и b принимают значения от $0$ до $9$ и подставляются вместо символов ?.
Условие x % 17 == 0 проверяет, делится ли полученное число на $17$ без остатка.
Программа выведет:
| Число | Результат деления на $17$ |
|---|---|
| $123405788$ | $7259164$ |
| $123435708$ | $7260924$ |
| $123445738$ | $7261514$ |
| $123455768$ | $7262104$ |
| $123465798$ | $7262694$ |
| $123495718$ | $7264454$ |
Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы:
- символ «?» означает ровно одну произвольную цифру;
- символ «» означает любую последовательность цифр произвольной длины; в том числе «» может задавать и пустую последовательность.
Например, маске $123*4?5$ соответствуют числа $123405$ и $12300405$.
Среди натуральных чисел, не превышающих $10^8$, найдите все числа, соответствующие маске $3?1*57$, делящиеся на $2023$ без остатка.
В ответе запишите в первом столбце таблицы все найденные числа в порядке возрастания, а во втором столбце – соответствующие результаты деления этих чисел на $2023$.
| | |
Так как нужны только числа, делящиеся на $2023$, будем перебирать не все числа до $10^8$, а только кратные $2023$.
Для проверки соответствия маске удобно использовать функцию fnmatch.
from fnmatch import fnmatch
for x in range(2023, 10**8 + 1, 2023):
if fnmatch(str(x), '3?1*57'):
print(x, x // 2023)
Функция fnmatch проверяет, соответствует ли запись числа заданной маске:
? — одна произвольная цифра;* — любое количество цифр, в том числе $0$.
Программа выведет:
| Число | Результат деления на $2023$ |
|---|---|
| $321657$ | $159$ |
| $34105757$ | $16859$ |
| $35117257$ | $17359$ |
| $36128757$ | $17859$ |
| $37140257$ | $18359$ |
| $38151757$ | $18859$ |
| $39163257$ | $19359$ |
Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы:
- символ «?» означает ровно одну произвольную цифру;
- символ «» означает любую последовательность цифр произвольной длины; в том числе «» может задавать и пустую последовательность.
Например, маске $123*4?5$ соответствуют числа $123405$ и $12300405$.
Среди натуральных чисел, не превышающих $10^8$, найдите все числа, соответствующие маске $123*67$, делящиеся на $133$ без остатка.
В ответе запишите в первом столбце таблицы все найденные числа в порядке возрастания, а во втором столбце – соответствующие им результаты деления этих чисел на $133$.
| | |
Так как нужны только числа, делящиеся на $133$, будем перебирать не все числа до $10^8$, а только кратные $133$.
Для проверки соответствия маске удобно использовать функцию fnmatch.
from fnmatch import fnmatch
for x in range(133, 10**8 + 1, 133):
if fnmatch(str(x), '123*67'):
print(x, x // 133)
Функция fnmatch проверяет, соответствует ли запись числа заданной маске:
? — одна произвольная цифра;* — любое количество цифр, в том числе $0$.
Программа выведет:
| Число | Результат деления на $133$ |
|---|---|
| $1236767$ | $9299$ |
| $12302367$ | $92499$ |
| $12315667$ | $92599$ |
| $12328967$ | $92699$ |
| $12342267$ | $92799$ |
| $12355567$ | $92899$ |
| $12368867$ | $92999$ |
| $12382167$ | $93099$ |
| $12395467$ | $93199$ |
Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы:
- символ «?» означает ровно одну произвольную цифру;
- символ «» означает любую последовательность цифр произвольной длины; в том числе «» может задавать и пустую последовательность.
Например, маске $123*4?5$ соответствуют числа $123405$ и $12300405$.
Среди натуральных чисел, не превышающих $10^9$, найдите все числа, соответствующие маске $12345?7?8$, делящиеся на число $31$ без остатка.
В ответе запишите в первом столбце таблицы все найденные числа в порядке возрастания, а во втором столбце – соответствующие им результаты деления этих чисел на $31$.
| | |
В маске $12345?7?8$ находятся два символа ?, каждый из которых обозначает одну произвольную цифру. Поэтому переберём все возможные значения этих двух цифр и проверим полученные числа на делимость на $31$.
for a in range(10):
for b in range(10):
x = int(f'12345{a}7{b}8')
if x % 31 == 0:
print(x, x // 31)
Переменные a и b принимают значения от $0$ до $9$ и подставляются вместо символов ?.
Условие x % 31 == 0 проверяет, делится ли полученное число на $31$ без остатка.
Программа выведет:
| Число | Результат деления на $31$ |
|---|---|
| $123452788$ | $3982348$ |
| $123453718$ | $3982378$ |
| $123457748$ | $3982508$ |
Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы:
- символ «?» означает ровно одну произвольную цифру;
- символ «» означает любую последовательность цифр произвольной длины; в том числе «» может задавать и пустую последовательность.
Например, маске $123*4?5$ соответствуют числа $123405$ и $12300405$.
Среди натуральных чисел, не превышающих $10^8$, найдите все числа, соответствующие маске $1234*58$, делящиеся на $21$ без остатка.
В ответе запишите в первом столбце таблицы все найденные числа в порядке возрастания, а во втором столбце – соответствующие им результаты деления этих чисел на $21$.
| | |
Так как нужны только числа, делящиеся на $21$, будем перебирать не все числа до $10^8$, а только кратные $21$.
Для проверки соответствия маске удобно использовать функцию fnmatch.
from fnmatch import fnmatch
for x in range(21, 10**8 + 1, 21):
if fnmatch(str(x), '1234*58'):
print(x, x // 21)
Функция fnmatch проверяет, соответствует ли запись числа заданной маске:
? — одна произвольная цифра;* — любое количество цифр, в том числе $0$.
Программа выведет:
| Число | Результат деления на $21$ |
|---|---|
| $1234758$ | $58798$ |
| $12341658$ | $587698$ |
| $12343758$ | $587798$ |
| $12345858$ | $587898$ |
| $12347958$ | $587998$ |