25.03 Маски
Готовиться с нами - ЛЕГКО!
Ошибка.
Попробуйте повторить позже
Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы:
– символ «?» означает ровно одну произвольную цифру;
– символ «*» означает любую последовательность цифр произвольной длины; в том числе «*» может задавать и пустую последовательность.
Например, маске 123*4?5 соответствуют числа 123405 и 12300405.
Среди натуральных чисел, не превышающих , найдите все числа, соответствующие маске 1* и имеющих ровно 5
нетривиальных делителей.
В ответ запишите найденные числа в порядке возрастания через пробел.
for x in range(1, 10**6+1): c = set() s = str(x) # проверяем, что число соответствует маске и у него есть корень, только в таком случае у числа может быть нечётное кол-во делителей if s[0] == ’1’ and x**0.5 == int(x**0.5): for i in range(2, int(x**0.5)+1): if x % i == 0: # если i является делителем x #добавляем i и парный ему делитель во множество c.add(i) c.add(x//i) if len(c) == 5: print(x)
Ошибка.
Попробуйте повторить позже
Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы:
– символ «?» означает ровно одну произвольную цифру;
– символ «*» означает любую последовательность цифр произвольной длины; в том числе «*» может задавать и пустую последовательность.
Например, маске 123*4?5 соответствуют числа 123405 и 12300405.
Среди натуральных чисел, не превышающих , найдите все числа, соответствующие маске 8??61*3, делящиеся на
4321 без остатка и частные от деления найденных чисел на 4321.
В ответ запишите пары найденных чисел (найденное число и частное от деления на 4321) в порядке возрастания через пробел.
# для оптимизации делаем цикл с шагом 4321, начиная с числа кратного 4321, для того чтобы проходиться по числам кратным 4321 for x in range(4321, 10**8+1, 4321): s = str(x) if (s[0] == ’8’) and (s[3:5] == ’61’) and (s[-1] == ’3’): # проверка, что число соответствует маске print(x, x // 4321)
Ошибка.
Попробуйте повторить позже
Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы:
– символ «?» означает ровно одну произвольную цифру;
– символ «*» означает любую последовательность цифр произвольной длины; в том числе «*» может задавать и пустую последовательность.
Например, маске 123*4?5 соответствуют числа 123405 и 12300405.
Среди натуральных чисел, не превышающих , найдите все числа, соответствующие маске ?6?9*56, делящиеся на
12233 без остатка и частные от деления найденных чисел на 12233.
В ответ запишите пары найденных чисел (найденное число и частное от деления на 12233) в порядке возрастания через пробел.
# для оптимизации делаем цикл с шагом 12233, начиная с числа кратного 12233, для того чтобы проходиться по числам кратным 12233 for x in range(12233, 10**9+1, 12233): s = str(x) if (s[1] == ’6’) and (s[3] == ’9’) and (s[-2] == ’5’) and (s[-1] == ’6’): # проверка, что число соответствует маске print(x, x // 12233)
Ошибка.
Попробуйте повторить позже
Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы:
– символ «?» означает ровно одну произвольную цифру;
– символ «*» означает любую последовательность цифр произвольной длины; в том числе «*» может задавать и пустую последовательность.
Например, маске 123*4?5 соответствуют числа 123405 и 12300405.
Среди натуральных чисел, не превышающих , найдите все числа, соответствующие маске 2??656*, делящиеся на
58598 без остатка и частные от деления найденных чисел на 58598.
В ответ запишите пары найденных чисел (найденное число и частное от деления на 58598) в порядке возрастания через пробел.
# для оптимизации делаем цикл с шагом 58598, начиная с числа кратного 58598, для того чтобы проходиться по числам кратным 58598 for x in range(58598, 10**9+1, 58598): s = str(x) if (s[0] == ’2’) and (s[3:6] == ’656’): # проверка, что число соответствует маске print(x, x // 58598)
Ошибка.
Попробуйте повторить позже
Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы:
– символ «?» означает ровно одну произвольную цифру;
– символ «*» означает любую последовательность цифр произвольной длины; в том числе «*» может задавать и пустую последовательность.
Например, маске 123*4?5 соответствуют числа 123405 и 12300405.
Среди натуральных чисел, не превышающих , найдите все числа, соответствующие маске 3?35*44?, делящиеся
на 11379 без остатка и частные от деления найденных чисел на 11379.
В ответ запишите пары найденных чисел (найденное число и частное от деления на 11379) в порядке возрастания через пробел.
# для оптимизации делаем цикл с шагом 11379, начиная с числа кратного 11379, для того чтобы проходиться по числам кратным 11379 for x in range(11379, 10**9+1, 11379): s = str(x) if (s[0] == ’3’) and (s[2:4] == ’35’) and (s[-3] == ’4’) and (s[-2] == ’4’): # проверка, что число соответствует маске print(x, x // 11379)
Ошибка.
Попробуйте повторить позже
Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы:
– символ «?» означает ровно одну произвольную цифру;
– символ «*» означает любую последовательность цифр произвольной длины; в том числе «*» может задавать и пустую последовательность.
Например, маске 123*4?5 соответствуют числа 123405 и 12300405.
Среди натуральных чисел, не превышающих , найдите все числа, соответствующие маске ?4?8*15?5, делящиеся
на 4215 без остатка и частные от деления найденных чисел на 4215.
В ответ запишите пары найденных чисел (найденное число и частное от деления на 4215) в порядке возрастания через пробел.
# для оптимизации делаем цикл с шагом 4215, начиная с числа кратного 4215, для того чтобы проходиться по числам кратным 4215 for x in range(4215, 10**9+1, 4215): s = str(x) if (s[1] == ’4’) and (s[3] == ’8’) and (s[-4:-2] == ’15’) and (s[-1] == ’5’): # проверка, что число соответствует маске print(x, x // 4215)
Ошибка.
Попробуйте повторить позже
Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы:
– символ « ? » означает ровно одну произвольную цифру;
– символ « * » означает любую последовательность цифр произвольной длины; в том числе « * » может задавать и пустую последовательность.
Например, маске 123*4?5 соответствуют числа 123405 и 12300405.
Среди натуральных чисел, не превышающих , найдите все числа, соответствующие маске
,
делящиеся на 17253 без остатка.
В ответе запишите пары чисел: найденное число и соответствующие ему результат деления на 17253. Пары расположите в порядке возрастания найденных чисел. Все числа в ответе отделите друг от друга пробелом.
Решение через fnmatch
from fnmatch import fnmatch # для оптимизации делаем цикл с шагом 17253, начиная с числа кратного 17253, для того чтобы проходиться по числам кратным 17253 for x in range(17_253, 10 ** 9 + 1, 17_253): s = str(x) if fnmatch(s, ’8?4*2?9*8’): # проверка, что число соответствует маске print(x, x // 17_253)
Решение через срезы
# комбинации, из которых одна точно должна быть в числе, удовлетворяющем маске m = [str(i) for i in range(209,299+1) if str(i)[0] == ’2’ and str(i)[-1] == ’9’] # для оптимизации делаем цикл с шагом 17253, начиная с числа кратного 17253, для того чтобы проходиться по числам кратным 17253 for x in range(8057151,10**9+1,17253): n = str(x) if n[0] == ’8’ and n[2] == ’4’ and n[-1] == ’8’: # проверка, что число частично соответствует маске if any(i in n[3:-1] for i in m): # проверка, что число полностью соответствует маске print(x,x//17253)
Ошибка.
Попробуйте повторить позже
Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы:
– символ «?» означает ровно одну произвольную цифру;
– символ «*» означает любую последовательность цифр произвольной длины; в том числе «*» может задавать и пустую последовательность.
Например, маске 123*4?5 соответствуют числа 123405 и 12300405.
Среди натуральных чисел, не превышающих , найдите все числа, соответствующие маске 63*095?4, делящиеся
на 1034 без остатка.
В ответ запишите пары чисел (найденное число и результат деления его на 1034) в порядке возрастания через пробел.
# для оптимизации делаем цикл с шагом 1034, начиная с числа кратного 1034, для того чтобы проходиться по числам кратным 1034 for x in range(1034, 10**9+1, 1034): s = str(x) if (s[0:2] == ’63’) and (s[-1] == ’4’) and (s[-5:-2] == ’095’): # проверка, что число соответствует маске print(x, x // 1034)
Ошибка.
Попробуйте повторить позже
Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы:
– символ «?» означает ровно одну произвольную цифру;
– символ «*» означает любую последовательность цифр произвольной длины; в том числе «*» может задавать и пустую последовательность.
Например, маске 123*4?5 соответствуют числа 123405 и 12300405.
Среди натуральных чисел, не превышающих , найдите все числа, соответствующие маске ?75*47?, делящиеся на
290 без остатка.
В ответ запишите пары чисел (найденное число и результат деления его на 290) в порядке возрастания через пробел.
# для оптимизации делаем цикл с шагом 290, начиная с числа кратного 290, для того чтобы проходиться по числам кратным 290 for x in range(290, 10**7+1, 290): s = str(x) if (s[1:3] == ’75’) and (s[-3:-1] == ’47’): # проверка, что число соответствует маске print(x, x // 290)
Ошибка.
Попробуйте повторить позже
Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы:
– символ «?» означает ровно одну произвольную цифру;
– символ «&» означает пару четных произвольных цифр;
– символ «*» означает любую последовательность цифр произвольной длины; в том числе «*» может задавать и пустую последовательность.
Например, маске 123&4?5 соответствуют числа 12340405 и 12322405.
Среди натуральных чисел, не превышающих , найдите все числа, соответствующие маске ?189&*, делящиеся на
36170 без остатка.
В ответ запишите пары чисел (найденное число и результат деления его на 36170) в порядке возрастания через пробел.
# для оптимизации делаем цикл с шагом 36170, начиная с числа кратного 36170, для того чтобы проходиться по числам кратным 36170 for x in range(36170, 10**9+1, 36170): s = str(x) if (s[1:4] == ’189’) and (int(s[4]) % 2 == 0) and (int(s[5]) % 2 == 0): # проверка, что число соответствует маске print(x, x // 36170)
Ошибка.
Попробуйте повторить позже
Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы:
– символ «?» означает ровно одну произвольную цифру;
– символ «&» означает пару произвольных цифр вида «четная+нечетная»;
– символ «*» означает любую последовательность цифр произвольной длины; в том числе «*» может задавать и пустую последовательность.
Например, маске 123&4?5 соответствуют числа 12341405 и 12327405.
Среди натуральных чисел, не превышающих , найдите все числа, соответствующие маске 2*11&0?, делящиеся
на 6170 без остатка.
В ответ запишите пары чисел (найденное число и результат деления его на 6170) в порядке возрастания через пробел.
# для оптимизации делаем цикл с шагом 6170, начиная с числа кратного 6170, для того чтобы проходиться по числам кратным 6170 for x in range(6170, 10**9+1, 6170): s = str(x) if ((s[0] == ’2’) and (s[-6:-4] == ’11’) and (int(s[-4]) % 2 == 0) and (int(s[-3]) % 2 == 1) and (s[-2] == ’0’)): # проверка, что число соответствует маске print(x, x // 6170)
Ошибка.
Попробуйте повторить позже
Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы:
– символ «?» означает ровно одну произвольную цифру;
– символ «*» означает любую последовательность цифр произвольной длины; в том числе «*» может задавать и пустую последовательность.
Например, маске 123*4?5 соответствуют числа 123405 и 12300405.
Среди натуральных чисел, не превышающих , найдите все числа, соответствующие маске 11*777*0, делящиеся
на 8450 без остатка.
В ответ запишите пары чисел (найденное число и результат деления его на 8450) в порядке возрастания через пробел.
# для оптимизации делаем цикл с шагом 8450, начиная с числа кратного 8450, для того чтобы проходиться по числам кратным 8450 for x in range(8450, 10**9+1, 8450): s = str(x) if (s[:2] == ’11’) and (’777’ in s[2:-1]) and (s[-1] == ’0’): # проверка, что число соответствует маске print(x, x // 8450)
Ошибка.
Попробуйте повторить позже
Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы:
– символ «?» означает ровно одну четную цифру;
– символ «*» означает любую последовательность нечетных цифр произвольной длины; в том числе «*» может задавать и пустую последовательность.
Например, маске 123*4?5 соответствуют числа 123405 и 12312405.
Среди натуральных чисел, не превышающих , найдите все числа, соответствующие маске ?*309, делящиеся на
10089 без остатка.
В ответ запишите пары чисел (найденное число и результат деления его на 10089) в порядке возрастания через пробел.
# для оптимизации делаем цикл с шагом 10089, начиная с числа кратного 10089, для того чтобы проходиться по числам кратным 10089 for x in range(10089, 10**9+1, 10089): s = str(x) t = [i for i in s[1:-3] if int(i) % 2 == 0] # чётные цифры числа от второго до 3 с правого края if (s[-3:] == ’309’) and (int(s[0]) % 2 == 0) and (not t): # проверка, что число соответствует маске и нет чётных цифр среди звёздочки print(x, x // 10089)
Ошибка.
Попробуйте повторить позже
Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы:
– символ «?» означает ровно одну произвольную цифру, кратную трем;
– символ «*» означает любое число, которое является делимым для суммы своих цифр; в том числе «*» может задавать и пустую последовательность.
Например, маске 123*4?5 соответствуют числа 123405 и 12310405.
Среди натуральных чисел, не превышающих , найдите все числа, соответствующие маске 12*3?45, делящиеся на
965 без остатка.
В ответ запишите пары чисел (найденное число и результат деления его на 965) в порядке возрастания через пробел.
# для оптимизации делаем цикл с шагом 965, начиная с числа кратного 965, для того чтобы проходиться по числам кратным 965 for x in range(965, 10**9+1, 965): s = str(x) a = s[2:-4] # звёздочка sm = sum(int(i) for i in a) # сумма цифр звёздочки if sm > 0: if (int(a) % sm == 0) and (s[:2] == ’12’) and (s[-4] == ’3’) and \ (int(s[-3]) % 3 == 0) and (s[-2:] == ’45’): # проверка, что число соответствует маске и выполняются все условия print(x, x // 965)
Ошибка.
Попробуйте повторить позже
Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы:
– символ «?» означает ровно одну произвольную цифру;
– символ «*» означает любую последовательность цифр произвольной длины; в том числе «*» может задавать и пустую последовательность.
Например, маске 123*4?5 соответствуют числа 123405 и 12300405.
Среди натуральных чисел, принадлежащих отрезку [], найдите все числа, которые соответствуют маске
1?904*4, а сумма их цифр делится без остатка на 34.
В ответ запишите числа в порядке возрастания через пробел.
for x in range(10**6, 10**7+1): s = str(x) # проверка, что число соответствует маске и cумма цифр кратна 34 if (s[0] == ’1’) and (s[2:5] == ’904’) and (s[-1] == ’4’) and (sum(int(i) for i in s) % 34 == 0): print(x)
Ошибка.
Попробуйте повторить позже
Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы:
– символ «?» означает ровно одну произвольную цифру;
– символ «*» означает любую последовательность цифр произвольной длины; в том числе «*» может задавать и пустую последовательность.
– символ «#» означает любое простое трехзначное число
Например, маске 123*4?5 соответствуют числа 123405 и 12300405.
Среди натуральных чисел, не превышающих , найдите все числа, соответствующие маске 1?0*12#10
В ответ запишите количество найденных чисел.
from fnmatch import * #функция для проверки на простоту def f(x): for i in range(2, int(x**0.5)+1): if x % i == 0: return False return True t = [] #список простых чисел for i in range(100, 1000): if f(i): t.append(i) res = [] #список искомых чисел for i in range(10**7): if fnmatch(str(i), ’1?0*12’): for j in t: if len(str(i)+str(j)+’10’) <= 11: res.append(str(i)+str(j)+’10’) else: break print(len(res))
Ошибка.
Попробуйте повторить позже
Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы:
– символ «?» означает ровно одну произвольную цифру;
– символ «*» означает любую последовательность цифр произвольной длины; в том числе «*» может задавать и пустую последовательность.
– символ «#» означает любое простое двухзначное число
Например, маске 123*4?5 соответствуют числа 123405 и 12300405.
Среди натуральных чисел, не превышающих , найдите все числа, соответствующие маске #1*1#.
В ответ запишите количество найденных чисел.
from fnmatch import * def f(x): # функция проверки числа на простоту for i in range(2, int(x**0.5)+1): if x % i == 0: return False return True t = [] # список простых чисел for i in range(10, 100): if f(i): t.append(i) res = [] # список подходящих чисел for i in range(10**6): if fnmatch(str(i), ’1*1’): # если число частично удовлетворяет маске for j in t: # перебор простых чисел for k in t: # перебор простых чисел n = int(str(j) + str(i) + str(k)) # собираем число, удовлетворяющее маске if n <= 10**10: res.append(n) print(len(set(res)))
Ошибка.
Попробуйте повторить позже
Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы:
– символ «?» означает ровно одну произвольную цифру;
– символ «*» означает любую последовательность цифр произвольной длины; в том числе «*» может задавать и пустую последовательность.
Например, маске 123*4?5 соответствуют числа 123405 и 12300405.
Среди натуральных чисел без ведущих нулей, не превышающих , найдите все числа, соответствующие маске
?5?22*4 и являющиеся полными квадратами.
В ответ запишите найденные числа в порядке возрастания через пробел.
for x in range(1000, 10**8+1): s = str(x) if (s[1] == ’5’) and (s[3:5] == ’22’) and (s[-1] == ’4’) and int(x**0.5)**2 == x: # проверка, что число соответствует маске print(x)
Ошибка.
Попробуйте повторить позже
Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы:
– символ «?» означает ровно одну произвольную цифру;
– символ «*» означает любую последовательность цифр произвольной длины; в том числе «*» может задавать и пустую последовательность.
Например, маске 123*4?5 соответствуют числа 123405 и 12300405.
Среди натуральных чисел, находящихся в интервале [], найдите все числа, соответствующие маске 16* и
имеющих ровно 13 нетривиальных делителей.
В ответ запишите найденные числа в порядке возрастания через пробел.
for x in range(10**3, 10**6+1): c = set() s = str(x) if s[:2] == ’16’ and x**0.5 == int(x**0.5): # проверка, что число удовлетворяет маске и у него есть целый корень, только так у числа может быть нечётное кол-во делителей for i in range(2, int(x**0.5)+1): #если i делитель x if x % i == 0: # то добавляем i и парный ему делитель во множество c.add(i) c.add(x//i) if len(c) == 13: print(x)
Ошибка.
Попробуйте повторить позже
Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы:
– символ «?» означает ровно одну произвольную цифру;
– символ «*» означает любую последовательность цифр произвольной длины; в том числе «*» может задавать и пустую последовательность.
Например, маске 123*4?5 соответствуют числа 123405 и 12300405.
Среди натуральных чисел, не превышающих , найдите все числа, соответствующие маске 137?15*7*50,
делящиеся на 178750 без остатка.
В ответ запишите пары найденных чисел в порядке возрастания через пробел: найденное число и частное от деления на 178750.
Решение через fnmatch
from fnmatch import fnmatch # для оптимизации делаем цикл с шагом 178750, начиная с числа кратного 178750, для того чтобы проходиться по числам кратным 178750 for x in range(137101250,10**12+1,178750): if fnmatch(str(x),’137?15*7*50’): # проверка, что число соответствует маске print(x,x//178750)
Решение через срезы
# для оптимизации делаем цикл с шагом 178750, начиная с числа кратного 178750, для того чтобы проходиться по числам кратным 178750 for x in range(137101250,10**12+1,178750): n = str(x) if ’137’ in n[:3] and ’15’ in n[4:6] and ’50’ in n[-2:]: if ’7’ in n[6:-2]: # проверки, что число соответствует маске print(x,x//178750)