25.03 Маски
Готовиться с нами - ЛЕГКО!
Ошибка.
Попробуйте повторить позже
Назовем маской числа последовательность цифр, в которой также могут встречаться следующие символы,
– символ "?"означает ровно одну произвольную цифру
– символ "*"означает любую последовательность цифр произвольной длины, в том числе и пустую последовательность
Среди натуральных чисел, не превышающих найдите все числа, соответствующие маске 31*2?9*, кратных 61 .
В ответе запишите все найденные числа в порядке возрастания через пробел.
Решение через циклы
ans = [] # Массив с найденными числами for x in range(10): # Перебираем ’?’ for y in range(10): # Перебираем ’*’ # Т. к. числа не должны превышать 10̂6, то в числе может быть "задействована" лишь одна * # Составляем числа: s1 = int(’31’ + str(y) + ’2’ + str(x) + ’9’) # собираем число, удовлетворяющее маске s2 = int(’312’ + str(x) + ’9’ + str(y)) # собираем число, удовлетворяющее маске if s1 % 61 == 0: ans.append(s1) if s2 % 61 == 0: ans.append(s2) print(*sorted(ans)) # Выводим отсортированный массив
Решение через fnmatch
from fnmatch import * for i in range(0, 10 ** 6 + 1, 61): if fnmatch(str(i), ’31*2?9*’): # проверяем , что число удовлетворяет маске print(i, end=’ ’)
Решение через срезы
m = [’209’,’219’,’229’,’239’,’249’,’259’,’269’,’279’,’289’,’299’] # комбинации, которые могут быть в числе, удовлетворяющем маске # для оптимизации делаем цикл с шагом 61, начиная с числа кратного 61, для того чтобы проходиться по числам кратным 61 for x in range(31232,10**6+1,61): n = str(x) if ’31’ in n[:2] and any(i in n[2:] for i in m): # проверки, что число удовлетворяет маске print(x)
Ошибка.
Попробуйте повторить позже
Назовем маской числа последовательность цифр, в которой также могут встречаться следующие символы,
– символ "?"означает ровно одну произвольную цифру
– символ "*"означает любую последовательность цифр произвольной длины, в том числе и пустую последовательность
Среди натуральных чисел, не превышающих найдите все числа, соответствующие маске *16*9?0?, кратных 387.
В ответе запишите все найденные числа в порядке возрастания через пробел.
Решение через циклы
ans = [] # Массив с найденными числами for x in range(10): # Перебираем первый ’?’ for y in range(10): # Перебираем второй ’?’ for z in range(10): # Перебираем ’*’ # Т. к. числа не должны превышать 10̂7, то в числе может быть "задействована" лишь одна * # Составляем числа: s1 = int(str(z) + ’169’ + str(x) + ’0’ + str(y)) # составляем число, удовлетворяющее маске s2 = int(’16’ + str(z) + ’9’ + str(x) + ’0’ + str(y)) # составляем число, удовлетворяющее маске if s1 % 387 == 0: ans.append(s1) if s2 % 387 == 0: ans.append(s2) print(*sorted(ans)) # Выводим отсортированный массив
Решение через fnmatch
from fnmatch import * # для оптимизации делаем цикл с шагом 387, начиная с числа кратного 387, для того чтобы проходиться по числам кратным 387 for i in range(0, 10 ** 7 + 1, 387): if fnmatch(str(i), ’*16*9?0?’): print(i, end=’ ’)
Решение через срезы
# для оптимизации делаем цикл с шагом 387, начиная с числа кратного 387, для того чтобы проходиться по числам кратным 387 for x in range(169119,10**7+1,387): n = str(x) if n[-2] == ’0’ and n[-4] == ’9’ and ’16’ in n[:-4]: # проверяем, что число удовлетворяет маске print(x)
Ошибка.
Попробуйте повторить позже
Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы:
— символ «?» означает ровно одну произвольную цифру;
— символ «*» означает любую последовательность цифр произвольной длины; в том числе «*» может задавать и пустую последовательность.
Найдите количество натуральных чисел, соответствующих маске (число не может начинаться с
нуля), чтобы число делилось на
(число не может начинаться с нуля). В ответ запишите количество
чисел.
counter=0 for a1 in (’123456789’): # исключаем 0, так как число не может начинаться с 0 for a2 in (’0123456789’): for a3 in (’123456789’): for a4 in (’0123456789’): for a5 in (’0123456789’): a=int(a1+a2+a3+a4+a5) # составляем число, удовлетворяющее маске b=int(a3+a4) # составляем делитель, удовлетворяющий маске if a%b==0: counter+=1 print(counter)
Ошибка.
Попробуйте повторить позже
Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы:
— символ «?» означает ровно одну произвольную цифру;
— символ «*» означает любую последовательность цифр произвольной длины; в том числе «*» может задавать и пустую последовательность.
Например, маске *
соответствуют числа
и
.
Среди натуральных чисел, не превышающих , найдите все числа, соответствующие маске
, делящиеся на
число
без остатка.
В ответе запишите все найденные числа в порядке возрастания и соответствующее им частное от деления на
.
Решение через циклы
for i in range(123450708,123460000): if (i%21==0) and (i%10==8) and ((i//100)%10==7): # проверяем, что число удовлетворяет маске print(i, i//21)
Решение через срезы
# для оптимизации делаем цикл с шагом 21, начиная с числа кратного 21, для того чтобы проходиться по числам кратным 21 for x in range(123450726,10**9+1,21): n = str(x) if ’12345’ in n[:5] and n[-3] == ’7’ and n[-1] == ’8’: # проверяем, что число удовлетворяет маске print(x,x//21)
Ошибка.
Попробуйте повторить позже
Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы:
— символ «?» означает ровно одну произвольную цифру;
— символ «*» означает любую последовательность цифр произвольной длины; в том числе «*» может задавать и пустую последовательность.
Среди натуральных чисел, не превышающих , найдите все числа, где сумма всех делителей числа соответствует
маске
*
. В ответе запишите количество найденных чисел.
def summa(n): # функция, которая вычисляет сумму делителей числа s = set() for i in range(1, int(n**0.5)+1): if n % i == 0: s.add(i) s.add(n // i) return sum(s) ans = 0 for i in range(1, 1000001): num = str(summa(i)) # сумма делителей # проверки суммы делителей, что они удовлетворяют маске if len(num) >= 3: if num[0] == ’2’ and int(num) % 100 == 45: ans += 1 print(ans)
Ошибка.
Попробуйте повторить позже
Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы:
– символ означает ровно одну произвольную цифру;
– символ означает любую последовательность цифр произвольной длины; в том числе
может задавать и
пустую последовательность.
Например, маске соответствуют числа
и
.
Среди натуральных чисел, не превышающих , найдите все числа, делящиеся на 394 и соответствующие маске
, но не соответствующие маске
.
Для каждого найденного числа в ответе укажите само число, а затем, через пробел, частное от деления на 394. Пары друг от друга так же отделите пробелом. Пары должны идти в порядке возрастания найденного числа.
Решение через fnmatch
import fnmatch # для оптимизации делаем цикл с шагом 394, начиная с числа кратного 394, для того чтобы проходиться по числам кратным 394 for x in range(394,10**8,394): if fnmatch.fnmatch(str(x), ’*562??90’) and not fnmatch.fnmatch(str(x), ’?3*7’): # проверка, что число удовлетворяет одной маске и не удовлетворяет другой маске print(x, x//394)
Решение через срезы
# для оптимизации делаем цикл с шагом 394, начиная с числа кратного 394, для того чтобы проходиться по числам кратным 394 for x in range(5620410,10**8+1,394): # n = str(x) if ’562’ in n[-7:-4] and ’90’ in n[-2:]: # проверка, что число удовлетворяет маске if n[1] != ’3’ and n[-1] != ’7’: # проверка, что число не удовлетворяет маске print(x,x//394)
Ошибка.
Попробуйте повторить позже
Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы:
– символ «?» означает ровно одну произвольную цифру;
– символ «*» означает любую последовательность цифр произвольной длины; в том числе «*» может задавать и пустую последовательность.
Например, маске 123*4?5 соответствуют числа 123405 и 12300405.
Среди натуральных чисел, не превышающих , найдите все числа, соответствующие маске 3??2*5, делящиеся на
113 без остатка и являющиеся полными квадратами.
В ответ запишите пары чисел (найденное число и результат деления его на 113) в порядке возрастания через пробел.
# для оптимизации делаем цикл с шагом 113, начиная с числа кратного 113 для того чтобы проходиться по числам кратным 113 for x in range(1017, 10**8+1, 113): s = str(x) if (s[0] == ’3’) and (s[3] == ’2’) and (s[-1] == ’5’) and int(x**0.5)**2 == x: # проверка, что число удовлетворяет маске и условию print(x, x // 113)
Ошибка.
Попробуйте повторить позже
Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы:
– символ «?» означает ровно одну произвольную цифру;
– символ «*» означает любую последовательность цифр произвольной длины; в том числе «*» может задавать и пустую последовательность.
Например, маске 123*4?5 соответствуют числа 123405 и 12300405.
Среди натуральных чисел, не превышающих , найдите все числа, соответствующие маске ?1?5*4?6, делящиеся
на 56354 без остатка.
В ответ запишите пары чисел (найденное число и результат деления его на 56354) в порядке возрастания через пробел.
# для оптимизации делаем цикл с шагом 56354, начиная с числа кратного 56354, для того чтоы проходиться по числам кратным 56354 for x in range(56354, 10**9+1, 56354): s = str(x) if (s[1] == ’1’) and (s[3] == ’5’) and (s[-3] == ’4’) and (s[-1] == ’6’): # проверяем, что число удовлетворяет маске print(x, x//56354)
Ошибка.
Попробуйте повторить позже
Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы:
– символ «?» означает ровно одну произвольную цифру;
– символ «&» означает последовательность из ровно двух произвольных цифр.
– символ «*» означает любую последовательность цифр произвольной длины; в том числе «*» может задавать и пустую последовательность.
Например, маске 123&4?5 соответствуют числа 12389405 и 12332405.
Среди натуральных чисел, не превышающих , найдите все числа, соответствующие маске 69?73&0*, делящиеся
на 8080 без остатка.
В ответ запишите пары чисел (найденное число и результат деления его на 8080) в порядке возрастания через пробел.
# для оптимизации делаем цикл с шагом 8080, начиная с числа кратного 8080, для того чтоы проходиться по числам кратным 8080 for x in range(8080, 10**9+1, 8080): s = str(x) if (s[0:2] == ’69’) and (s[3:5] == ’73’) and (s[7] == ’0’): # проверяем, что число соответствует маске print(x, x // 8080)
Ошибка.
Попробуйте повторить позже
Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы:
– символ «?» означает ровно одну произвольную цифру;
– символ «*» означает любую последовательность цифр произвольной длины; в том числе «*» может задавать и пустую последовательность.
Например, маске 123*4?5 соответствуют числа 123405 и 12300405.
Среди натуральных чисел, не превышающих , найдите последние 5 чисел, соответствующие маске 9?7*13 и
являющиеся простыми.
В ответ запишите числа в порядке возрастания через пробел.
def simple(x): # функция, которая проверяет является ли число - простым if x == 1: return False for delim in range(2, int(x**0.5)+1): if x % delim == 0: return False return True for x in range(10000, 10**7+1): s = str(x) if (s[0] == ’9’) and (s[2] == ’7’) and (s[:-3:-1] == ’31’) and simple(x): # проверка, что число удовлетворяет маске и выполняет условия print(x)
Ошибка.
Попробуйте повторить позже
Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы:
– символ «?» означает ровно одну произвольную цифру;
– символ «*» означает любую последовательность цифр произвольной длины; в том числе «*» может задавать и пустую последовательность.
Например, маске 123*4?5 соответствуют числа 123405 и 12300405.
Среди натуральных чисел, не превышающих , найдите последние 5 чисел, соответствующие маске 1*77 и
представляющие собой произведение двух различных простых делителей.
В ответ запишите числа в порядке возрастания через пробел.
def simple(x): # функция, которая проверяет является ли число простым if x == 1: return False for delim in range(2, int(x ** 0.5) + 1): if x % delim == 0: return False return True for x in range(1, 10 ** 5 + 1): s = str(x) t = 0 if (s[0] == ’1’) and (s[:-3:-1] == ’77’): # проверка, что число удовлетворяет маске for i in range(2, int(x ** 0.5) + 1): # проверка, что число можно образовать произведением двух простых его делителей if simple(x // i) and simple(i) and (x % i == 0) and (i != x // i): t = 1 break if t == 1: print(x)
Ошибка.
Попробуйте повторить позже
Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы:
– символ «?» означает ровно одну произвольную цифру;
– символ «*» означает любую последовательность цифр произвольной длины; в том числе «*» может задавать и пустую последовательность.
Например, маске 123*4?5 соответствуют числа 123405 и 12300405.
Среди натуральных чисел, не превышающих , найдите последние пять чисел, соответствующие маске 9?99*16,
делящиеся на 1724 без остатка.
В ответ запишите пары чисел (найденное число и результат деления его на 1724) в порядке возрастания через пробел.
# для оптимизации делаем цикл с шагом 1724, начиная с числа кратного 1724, для того чтобы проходиться по числам кратным 1724 for x in range(1724, 10**10+1, 1724): s = str(x) if (s[0] == ’9’) and (s[2:4] == ’99’) and (s[:-3:-1] == ’61’): # проверка, что число соответствует маске print(x, x // 1724)
Ошибка.
Попробуйте повторить позже
Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы:
– символ «?» означает ровно одну произвольную цифру;
– символ «*» означает любую последовательность цифр произвольной длины; в том числе «*» может задавать и пустую последовательность.
Например, маске 123*4?5 соответствуют числа 123405 и 12300405.
Среди натуральных чисел, не превышающих , найдите последние пять чисел, соответствующие маске ?3*313?,
делящиеся на 8965 без остатка.
В ответ запишите пары чисел (найденное число и результат деления его на 8965) в порядке возрастания через пробел.
# для оптимизации делаем цикл с шагом 8965, начиная с числа кратного 8965, для того чтобы проходиться по числам кратным 8965 for x in range(8965, 10**10+1, 8965): s = str(x) if (s[1] == ’3’) and (s[-4:-1] == ’313’): # проверка, что число соответствует маске print(x, x // 8965)
Ошибка.
Попробуйте повторить позже
Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы:
– символ «?» означает ровно одну произвольную цифру;
– символ «*» означает любую последовательность цифр произвольной длины; в том числе «*» может задавать и пустую последовательность.
Например, маске 123*4?5 соответствуют числа 123405 и 12300405.
Среди натуральных чисел, не превышающих , найдите последние пять чисел, соответствующие маске 19*11*67,
делящиеся на 3939 без остатка.
В ответ запишите 5 последних пар чисел (найденное число и результат деления его на 3939) в порядке возрастания через пробел.
Решение через fnmatch
from fnmatch import * # для оптимизации делаем цикл с шагом 3939, начиная с числа кратного 3939, для того чтобы проходиться по числам кратным 3939 for n in range(3939, 10 ** 10 + 1, 3939): if fnmatch(str(n), ’19*11*67’): # проверка, что число соответствует маске print(n, n // 3939)
Решение через срезы
# для оптимизации делаем цикл с шагом 3939, начиная с числа кратного 3939, для того чтобы проходиться по числам кратным 3939 for x in range(193011, 10**10+1,3939): n = str(x) if ’19’ in n[:2] and ’67’ in n[-2:] and ’11’ in n[2:-2]: # проверка, что число соответствует маске print(x,x//3939)
Ошибка.
Попробуйте повторить позже
Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы:
– символ «?» означает ровно одну произвольную цифру;
– символ «*» означает любую последовательность цифр произвольной длины; в том числе «*» может задавать и пустую последовательность.
Например, маске 123*4?5 соответствуют числа 123405 и 12300405.
Среди натуральных чисел, не превышающих , найдите все числа, соответствующие маске 1?20*24?4, делящиеся
на 17456 без остатка.
В ответ запишите пары: найденное число, через пробел, частное от деления на 17456. Пары отсортируйте порядке возрастания найденных чисел, друг от друга пары также отделите пробелом.
Решение через fnmatch
from fnmatch import * # для оптимизации делаем цикл с шагом 17456, начиная с числа кратного 17456, для того чтобы проходиться по числам кратным 17456 for n in range(17456, 10 ** 11 + 1, 17456): if fnmatch(str(n), ’1?20*24?4’): # проверка, что число соответствует маске print(n, n // 17456)
Решение через срезы
# для оптимизации делаем цикл с шагом 17456, начиная с числа кратного 17456, для того чтобы проходиться по числам кратным 17456 for x in range(10211760, 10**11+1,17456): n = str(x) if n[0] == ’1’ and n[-1] == ’4’ and ’20’ in n[2:4] and ’24’ in n[-4:-2]: # проверка, что число соответствует маске print(x,x//17456)
Ошибка.
Попробуйте повторить позже
Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы:
– символ «?» означает ровно одну произвольную цифру;
– символ «*» означает любую последовательность цифр произвольной длины; в том числе «*» может задавать и пустую последовательность.
Например, маске 123*4?5 соответствуют числа 123405 и 12300405.
Среди натуральных чисел, не превышающих , найдите все числа, соответствующие маске 35??78*9, делящиеся
на 1777 без остатка и частные от деления найденных чисел на 1777.
В ответ запишите пары найденных чисел в порядке возрастания через пробел.
# для оптимизации делаем цикл с шагом 1777, начиная с числа кратного 1777, для того чтобы проходиться по числам кратным 1777 for x in range(1777, 10**9+1, 1777): s = str(x) if (s[0:2] == ’35’) and (s[4:6] == ’78’) and (s[-1] == ’9’): # проверка, что число соответствует маске print(x, x // 1777)
Ошибка.
Попробуйте повторить позже
Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы:
– символ «?» означает ровно одну произвольную цифру;
– символ «*» означает любую последовательность цифр произвольной длины; в том числе «*» может задавать и пустую последовательность.
Например, маске 123*4?5 соответствуют числа 123405 и 12300405.
Среди натуральных чисел, не превышающих , найдите все числа, соответствующие маске ?9?73* и являющиеся
полными квадратами.
В ответ запишите найденные числа в порядке возрастания через пробел.
for x in range(10000, 10**8+1): s = str(x) if (s[1] == ’9’) and (s[3:5] == ’73’) and int(x**0.5)**2 == x: # проверка, что число соответствует маске и выполняет условие print(x)
Ошибка.
Попробуйте повторить позже
Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы:
– символ «?» означает ровно одну произвольную цифру;
– символ «*» означает любую последовательность цифр произвольной длины; в том числе «*» может задавать и пустую последовательность.
Например, маске 123*4?5 соответствуют числа 123405 и 12300405.
Среди натуральных чисел, не превышающих , найдите все числа, соответствующие маске 30?125*8, делящиеся
на 6036 без остатка.
В ответ запишите пары найденных чисел (найденное число и частное от деления на 6036) в порядке возрастания через пробел.
# для оптимизации делаем цикл с шагом 6036, начиная с числа кратного 6036, для того чтобы проходиться по числам кратным 6036 for x in range(6036, 10**10+1, 6036): s = str(x) if (s[0:2] == ’30’) and (s[3:6] == ’125’) and (s[-1] == ’8’): # проверка, что число соответствует маске print(x, x // 6036)
Ошибка.
Попробуйте повторить позже
Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы:
– символ «?» означает ровно одну произвольную цифру;
– символ «*» означает любую последовательность цифр произвольной длины; в том числе «*» может задавать и пустую последовательность.
Например, маске 123*4?5 соответствуют числа 123405 и 12300405.
Среди натуральных чисел, не превышающих , найдите все числа, соответствующие маске 10??758*8, делящиеся
на 19562 без остатка.
В ответ запишите пары: найденное число, через пробел, частное от деления на 19562. Пары отсортируйте порядке возрастания найденных чисел, друг от друга пары также отделите пробелом.
# для оптимизации делаем цикл с шагом 19562, начиная с числа кратного 19562, для того чтобы проходиться по числам кратным 19562 for x in range(19562, 10**11+1, 19562): s = str(x) if (s[0:2] == ’10’) and (s[4:7] == ’758’) and (s[-1] == ’8’): # проверка, что число соответствует маске print(x, x // 19562)
Ошибка.
Попробуйте повторить позже
Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы:
– символ «?» означает ровно одну произвольную цифру;
– символ «*» означает любую последовательность цифр произвольной длины; в том числе «*» может задавать и пустую последовательность.
Например, маске 123*4?5 соответствуют числа 123405 и 12300405.
Среди натуральных чисел, не превышающих , найдите все числа, соответствующие маске 1?57*22 и делящиеся
на 3798 без остатка.
В ответе через пробел запишите количество подходящих чисел и целую часть их среднего арифметического.
a = set() # для оптимизации делаем цикл с шагом 3798, начиная с числа кратного 3798, для того чтобы проходиться по числам кратным 3798 for x in range(3798, 10**10+1, 3798): s = str(x) if (s[0] == ’1’) and (s[2:4] == ’57’) and (s[-2:] == ’22’): # проверка, что число соответствует маске a.add(x) print(len(a)) print(sum(a)/len(a))