25.03 Маски
Ошибка.
Попробуйте повторить позже
Азамат решил попробовать новый КрабсБургер в Макдоналдсе. Но поскольку он был закрыт, пришлось довольствоваться заказом в бургерной неподалёку. Номер заказа в данном заведении состоит из цифр, и называется счастливым, если сумма первых трех цифр заказа равна сумме вторых трех цифр. Номера заказов не могут начинаться с нуля и идут по возрастанию. Азамат заметил, что номера заказов других людей частично совпадают с его, и вывел маску номера заказа, в которой могут встречаться следующие символы:
– Символ «?» означает ровно одну произвольную цифру;
– Символ «*» означает любую последовательность цифр произвольной длины; в том числе «*» может задавать и пустую последовательность.
Найдите количество таких номеров заказов, которые соответсвуют маске ??* и являются счастливыми.
Решение через циклы
ans = 0 for i in range(1, 10): #число не может начинаться с 0 for j in range(10): for t in range(10): for k in range(10): s = str(i) + ’9’ + str(j) + ’7’ + str(t) + str(k) # составляем маску числа if int(s[0]) + int(s[1]) + int(s[2]) == int(s[3]) + int(s[4]) + int(s[5]): # проверка по условию ans += 1 print(ans)
Решение через fnmatch
from fnmatch import fnmatch # импортимуем fnmatch count = 0 for x in range(100000,999999+1): # делаем перебор 6-значных чисел n = str(x) if fnmatch(n,’?9?7*’): # проверяем, что число соответствует маске first = n[:3] # первые три цифры числа second = n[3:] # вторые три цифры числа sm_first = sum(map(int,first)) # сумма первых трёх цифр sm_second = sum(map(int,second)) # сумма последних трёх цифр if sm_first == sm_second: count += 1 print(count)
Ошибка.
Попробуйте повторить позже
Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы:
— символ «?» означает ровно одну произвольную цифру;
— символ «*» означает любую последовательность цифр произвольной длины; в том числе «*» может задавать и пустую последовательность.
Среди натуральных чисел, не превышающих , найдите все числа, соответствующие маске ??* и делящиеся на без остатка. В ответе запишите количество найденных чисел.
Решение через циклы
ans = 0 for i in range(1, 10): # для первого вопроса исключаем 0 - число не может начинаться с 0 for j in range(10): # пустая звёздочка s = str(i) + ’3579’ + str(j) + ’6’ if int(s) % 7 == 0: ans += 1 #односимвольная звёздочка for w in range(10): s1 = str(i) + ’3579’ + str(j) + ’6’ + str(w) if int(s1)%7 == 0: ans += 1 #двухсимвольная звёздочка for w in range(10): for z in range(10): s2 = str(i) + ’3579’ + str(j) + ’6’ + str(w) + str(z) if int(s2)%7 == 0: ans += 1 print(ans)
Решение через itertools
from itertools import product # импортируем product из itertools digits = ’0123456789’ #все возможные цифры d = ’123456789’ # цифры для первого вопроса, он стоит на первом месте, число не может начинаться с нуля ans = [] # список всех подходящих чисел под маску for digit_1 in product(d,repeat = 1): # формируем вопрос for digit_2 in product(digits,repeat = 1): # формируем вопрос for i in range(4): # делаем перебор для звёздочки, в нашем случае, в звёздочке не может быть более 3 цифр и при этом чтобы число было меньше 10**9 for digit_3 in product(digits,repeat = i): # формируем звёздочку ans += [int(’’.join(digit_1) + ’3579’ + ’’.join(digit_2) + ’6’ + ’’.join(digit_3))] # собираем по частям число, удовлетворяющее маске count = 0 # итоговый счётчик for x in sorted(set(ans)): # проход по множеству получившихся чисел if x <= 10**9 and x % 7 == 0: # если число не больше 10**9 и при этом кратно 7 count += 1 print(count) # вывод ответа
Ошибка.
Попробуйте повторить позже
Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы:
— символ «?» означает ровно одну произвольную цифру;
— символ «*» означает любую последовательность цифр произвольной длины; в том числе «*» может задавать и пустую последовательность.
Сколько существует натуральных чисел, соответствующих следующей маске и делящихся на без остатка. В ответ запишите в порядке возрастания найденные числа и соответствующее им частное от деления на .
Решение через циклы
for a1 in (’0123456789’): for a2 in (’0123456789’): s=’987’+a1+’654’+a2+’32’ n=int(s) if n%88==0: print(n,n//88)
Решение через fnmatch
from fnmatch import fnmatch # импортируем модуль fnmatch for x in range(9870654112,9879654932+1,88): # для оптимизации делаем цикл с шагом 88 с числа кратного 88, таким образом, мы будем проходиться только по кратным 88 числам if fnmatch(str(x),’987?654?32’): # если число соответствует маске print(x,x//88)
Решение через срезы
for x in range(9870654112,9879654932+1,88): # для оптимизации делаем цикл с шагом 88 с числа кратного 88, таким образом, мы будем проходиться только по кратным 88 числам n = str(x) if ’987’ in n[:3] and ’654’ in n[4:7] and ’32’ in n[-2:]: # проверяем по частям, что число соответсвует маске print(x,x//88)
Ошибка.
Попробуйте повторить позже
Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы:
— символ «?» означает ровно одну произвольную цифру;
— символ «*» означает любую последовательность цифр произвольной длины; в том числе «*» может задавать и пустую последовательность.
Найдите такое натуральное число, соответствующее следующей маске (число не может начинаться с нуля) и делящееся на без остатка. В ответ запишите найденное число и соответствующее ему частное от деления на .
Решение через циклы
for a1 in (’123456789’): # Исключаем для первого места 0, так как числа не могут начинаться с 0 for a2 in (’0123456789’): for a3 in (’0123456789’): for a4 in (’0123456789’): for a5 in (’0123456789’): for a6 in (’0123456789’): s=a1+a2+a3+’1’+a4+a5+’1’+a6 # составляем число, удовлетворяющее маске n=int(s) if n%434343==0: print(n,n//434343)
Решение через срезы
# для оптимизации делаем цикл с шагом 434343 с числа кратного 434343, таким образом, мы будем проходиться только по кратным 434343 числам for x in range(10424232,10**8,434343): n = str(x) if n[-2] == ’1’ and n[-5] == ’1’: # проверка по условию print(x,x//434343)
Ошибка.
Попробуйте повторить позже
Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы:
— символ «?» означает ровно одну произвольную цифру;
— символ «*» означает любую последовательность цифр произвольной длины; в том числе «*» может задавать и пустую последовательность.
Сколько существует натуральных чисел, соответствующих следующей маске (число не может начинаться с нуля) и делящихся на без остатка. В ответ запишите в порядке возрастания найденные числа и соответствующее им частное от деления на .
if i%787878==0:
print(i,i//787878)
Ошибка.
Попробуйте повторить позже
Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы:
— символ «?» означает ровно одну произвольную цифру;
— символ «*» означает любую последовательность цифр произвольной длины; в том числе «*» может задавать и пустую последовательность.
Сколько существует натуральных чисел, не превышающих , соответствующих следующей маске *? и их сумма цифр делилась на . В ответ запишите количество таких чисел.
Примечание. Если сумма цифр числа делится на 9, то и само число делится на 9.
ans = 0 for j in range(10): # пустая звёздочка s = "123" + str(j) + "34" # составляем слово if int(s) % 9 == 0: ans += 1 #односимвольная звёздочка for w in range(10): s1 = "1" + str(w) + "23" + str(j) + "34" # составляем слово if int(s1) % 9 == 0: ans += 1 #двухсимвольная звёздочка for w in range(10): for z in range(10): s2 = "1" + str(w) + str(z) + "23" + str(j) + "34" # составляем слово if int(s2) % 9 == 0: ans += 1 #трехсимвольная звёздочка for w in range(10): for z in range(10): for k in range(10): s3 = "1" + str(w) + str(z) + str(k) + "23" + str(j) + "34" # составляем слово if int(s3) % 9 == 0: ans += 1 print(ans)
Ошибка.
Попробуйте повторить позже
Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы:
— символ «?» означает ровно одну произвольную цифру;
— символ «*» означает любую последовательность цифр произвольной длины; в том числе «*» может задавать и пустую последовательность.
Сколько существует натуральных чисел, соответствующих следующей маске и их сумма цифр делилась на . В ответ запишите в порядке возрастания найденные числа и соответствующий им результат от целочисленного деления на .
Решение через циклы
counter=0 for a1 in (’0123456789’): s=’123’+a1 # число, удовлетворяющее маске n = 0 # сумма цифр числа for i in s: n += int(i) s = int(s) if n%3==0: print(s, s//3)
Решение через срезы
for x in range(1230,1240): n = str(x) if ’123’ in n[:3] and sum(map(int,n)) % 3 == 0: # проверка, что число соответствует маске и сумма цифр числа делится на 3 print(x,x//3)
Ошибка.
Попробуйте повторить позже
Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы:
— символ «?» означает ровно одну произвольную цифру;
— символ «*» означает любую последовательность цифр произвольной длины; в том числе «*» может задавать и пустую последовательность.
Сколько существует натуральных чисел, соответствующих следующей маске
и разность между суммой цифр, стоящих на нечетных местах, и суммой цифр, стоящих на четных местах
делилась на . В ответ запишите количество таких чисел.
counter=0 for a1 in (’0123456789’): for a2 in (’0123456789’): s=’123’+a1+’123’+a2+’123’ # составляем число, удовлетворяющее маске n=abs(1+3+1+3+1+3-2-int(a1)-2-int(a2)-2) # высчитываем модуль разности чисел стоящих на нечётных местах и чётных местах if n%11==0: counter+=1 print(counter)
Ошибка.
Попробуйте повторить позже
Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы:
— символ «?» означает ровно одну произвольную цифру;
— символ «*» означает любую последовательность цифр произвольной длины; в том числе «*» может задавать и пустую последовательность.
Сколько существует натуральных чисел, соответствующих следующей маске
и разность между суммой цифр, стоящих на нечетных местах, и суммой цифр, стоящих на четных местах
делилась на , а сумма всех цифр делилась на . В ответ запишите количество таких чисел. Если таких чисел нет, в
ответ запишите .
counter=0 for a1 in (’0123456789’): for a2 in (’0123456789’): s=’123’+a1+’123’+a2+’123’ # составляем число, удовлетворяющее маске n=abs(1+3+1+3+1+3-2-int(a1)-2-int(a2) - 2) # вычисляем модуль разность чисел стоящих на нечётных местах и чётных местах summa = 0 # сумма цифр числа for j in s: summa += int(j) if n%11==0 and summa%3==0: # проверка по условию counter+=1 print(counter)
Ошибка.
Попробуйте повторить позже
Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы:
— символ «?» означает ровно одну произвольную цифру;
— символ «*» означает любую последовательность цифр произвольной длины; в том числе «*» может задавать и пустую последовательность.
Сколько существует натуральных чисел, соответствующих следующей маске и чтобы число десятков, сложенное с учетверенным число единиц, было кратно (то есть для числа это ). В ответ запишите количество найденных чисел.
Решение через циклы
counter = 0 for a1 in (’0123456789’): for a2 in (’0123456789’): s = int(’90’+a1+’123’+a2) # составляем число, удовлетворяющее маске n = 3+int(a2)*4 # считаем сумму десятков и 4*единиц if n%13==0: counter += 1 print(counter)
Решение через срезы
count = 0 for x in range(9001230,9091239+1): n = str(x) # проверяем, что число соответствует маске и сумма десятков и 4*единиц кратно 13 if ’90’ in n[:2] and ’123’ in n[3:6] and (int(n[-2]) + 4*int(n[-1])) % 13 == 0: count += 1 print(count)
Ошибка.
Попробуйте повторить позже
Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы:
— символ «?» означает ровно одну произвольную цифру;
— символ «*» означает любую последовательность цифр произвольной длины; в том числе «*» может задавать и пустую последовательность.
Сколько существует натуральных чисел, соответствующих следующей маске и чтобы разряд десятков, сложенный с учетверенным разрядом единиц, был кратен (то есть для числа это ). Кроме того, сумма цифр должна быть кратна . В ответ запишите в порядке возрастания найденные числа и соответствующий им результат от целочисленного деления на .
Решение через циклы
for a1 in (’0123456789’): for a2 in (’0123456789’): s=’90’+a1+’123’+a2 # собираем число, удовлетворяющее маске n=3+int(a2)*4 # сумма десятков и 4*единиц summa = 0 # сумма цифр числа for i in s: summa += int(i) if n%13==0 and summa%3==0: print(int(s), int(s)//39)
Решение через срезы
for x in range(9001230,9091239+1): n = str(x) # проверяем, что число соответствует маске и сумма десятков и 4*единиц кратно 13 и что сумма цифр числа кратна 3 if ’90’ in n[:2] and ’123’ in n[3:6]: if (int(n[-2]) + 4*int(n[-1])) % 13 == 0 and sum(map(int,n)) % 3 == 0: print(x,x//39)
Ошибка.
Попробуйте повторить позже
Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы:
— символ «?» означает ровно одну произвольную цифру;
— символ «*» означает любую последовательность цифр произвольной длины; в том числе «*» может задавать и пустую последовательность.
Найдите количество натуральных чисел, соответствующих маске (число не может начинаться с нуля), чтобы число делилось на (число не может начинаться с нуля). В ответ запишите количество чисел.
counter=0 for a1 in (’123456789’): # 0 исключен из перебора, так как число не может начинаться с 0 for a2 in (’0123456789’): for a3 in (’0123456789’): for a4 in (’0123456789’): for a5 in (’0123456789’): a=int(a1+a2+a3+a4+a5) # формируем число, удовлетворяющее маске b=int(a1+a2) # формируем делитель, удовлетворяющий маске if a%b==0: counter+=1 print(counter)
Ошибка.
Попробуйте повторить позже
Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы:
— символ «?» означает ровно одну произвольную цифру;
— символ «*» означает любую последовательность цифр произвольной длины; в том числе «*» может задавать и пустую последовательность.
Сколько существует простых натуральных чисел, соответствующих следующей маске . В ответ запишите количество чисел.
Решение через циклы
def is_simple(n): # функция, которая проверяет, что число простое if n==1: return False for i in range(2,int(n**0.5)+1): if n%i==0: return False return True counter=0 for a1 in (’0123456789’): for a2 in (’0123456789’): s=’987’+a1+’654’+a2+’3’ # формируем число, удовлетворяющее маске n=int(s) if is_simple(n): # если число простое counter+=1 print(counter)
Решение через срезы
def simple(n): # функция, которая проверяет, что число простое if n == 1: return False for i in range(2,int(n**0.5)+1): if n % i == 0: return False return True count = 0 for x in range(987065403,987965493+1): n = str(x) if ’987’ in n[:3] and ’654’ in n[4:7] and n[-1] == ’3’: # проверка, что число удовлетворяет маске if simple(x): # проверка, что число - простое count += 1 print(count)
Ошибка.
Попробуйте повторить позже
Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы:
— символ «?» означает ровно одну произвольную цифру;
— символ «*» означает любую последовательность цифр произвольной длины; в том числе «*» может задавать и пустую последовательность.
Сколько существует натуральных чисел, соответствующих следующей маске , чтобы сумма делителей давала остаток от деления на . В ответ запишите количетсво чисел.
Решение через циклы
def dev(n): # функция, которая возвращает сумму делителей числа s=0 for i in range(1,int(n**0.5)+1): if n%i==0: s+=i if n//i!=i: s+=n//i return s counter=0 for a1 in (’0123456789’): for a2 in (’0123456789’): s=’987’+a1+’654’+a2+’3’ # собираем число, удовлетворяющее маске n=int(s) if dev(n)%3==1: # проверка, что сумма делителей дает остаток 1 при делении на 3 counter+=1 print(counter)
Решение через срезы
def divs(n): # функция, которая возвращает список делителей числа d = set() for i in range(1,int(n**0.5)+1): if n % i == 0: d.add(i) d.add(n//i) return sorted(d) # возвращаем отсортированный список делителей числа count = 0 for x in range(987065403,987965493+1): n = str(x) if ’987’ in n[:3] and ’654’ in n[4:7] and n[-1] == ’3’: # проверка, что число удовлетворяет маске if sum(divs(x)) % 3 == 1: # проверка, что сумма делителей дает остаток 1 при делении на 3 count += 1 print(count)
Ошибка.
Попробуйте повторить позже
Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы:
— символ «?» означает ровно одну произвольную цифру;
— символ «*» означает любую последовательность цифр произвольной длины; в том числе «*» может задавать и пустую последовательность.
Сколько существует натуральных чисел, соответствующих следующей маске , чтобы сумма цифр нетривиальных делителей делилась на . В ответ запишите количетсво чисел.
Решение через циклы
def dev(n): # функция, которая возвращает сумму нетривиальных делителей числа s=0 for i in range(2,int(n**0.5)+1): if n%i==0: s+=i if n//i!=i: s+=n//i return s counter=0 for a1 in (’0123456789’): for a2 in (’0123456789’): s=’987’+a1+’654’+a2+’3’ # формируем число, удовлетворяющее маске n=int(s) if dev(n)%9==0: # проверка, что сумма делителей кратна 9 counter+=1 print(counter)
Решение через срезы
def divs(n): # функция, которая возвращает список делителей числа d = set() for i in range(2,int(n**0.5)+1): if n % i == 0: d.add(i) d.add(n//i) return sorted(d) # возвращаем отсортированный список делителей числа count = 0 for x in range(987065403,987965493+1): n = str(x) if ’987’ in n[:3] and ’654’ in n[4:7] and n[-1] == ’3’: # проверка, что число удовлетворяет маске if sum(divs(x)) % 9 == 0: # проверка, что сумма делителей кратна 9 count += 1 print(count)
Ошибка.
Попробуйте повторить позже
Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы:
— символ «?» означает ровно одну произвольную цифру;
— символ «*» означает любую последовательность цифр произвольной длины; в том числе «*» может задавать и пустую последовательность.
Сколько существует натуральных чисел, соответствующих следующей маске , чтобы в сумме нетривиальных делителей разность между суммой цифр, стоящих на нечетных местах, и суммой цифр, стояших на четных местах делилась на . В ответ запишите количество чисел.
Решение через циклы
def dev(n): # функция, которая считает сумму нетривиальных делителей числа s=0 for i in range(2,int(n**0.5)+1): if n%i==0: s+=i if n//i!=i: s+=n//i return s counter=0 for a1 in (’0123456789’): for a2 in (’0123456789’): s=’987’+a1+’654’+a2+’3’ # формируем число, удовлетворяющее маске n=str(dev(int(s))) # сумма делителей числа summa = 0 for i in range(len(n)): if i % 2 == 0: # если число стоит на нечётном месте summa += int(n[i]) else: # если число стоит на чётном месте summa -= int(n[i]) if abs(summa)%11==0: counter+=1 print(counter)
Решение через срезы
def divs(n): # функция, которая возвращает список делителей числа d = set() for i in range(2,int(n**0.5)+1): if n % i == 0: d.add(i) d.add(n//i) return sorted(d) # возвращаем отсортированный список делителей числа count = 0 for x in range(987065403,987965493+1): n = str(x) if ’987’ in n[:3] and ’654’ in n[4:7] and n[-1] == ’3’: # проверка, что число удовлетворяет маске sm_divs = str(sum(divs(x))) # сумма делителей числа sm_odd_pos = sum(int(sm_divs[i]) for i in range(len(sm_divs)) if i % 2 == 0) # сумма цифр суммы делителей стоящих на нечётных местах sm_even_pos = sum(int(sm_divs[i]) for i in range(len(sm_divs)) if i % 2 != 0) # сумма цифр суммы делителей стоящих на чётных местах if abs(sm_even_pos-sm_odd_pos) % 11 == 0: count += 1 print(count)
Ошибка.
Попробуйте повторить позже
Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы:
— символ «?» означает ровно одну произвольную цифру;
— символ «*» означает любую последовательность цифр произвольной длины; в том числе «*» может задавать и пустую последовательность.
Сколько существует натуральных чисел, соответствующих следующей маске , чтобы в сумме нетривиальных делителей разность между суммой цифр, стоящих на нечетных местах, и суммой цифр, стоящих на четных местах делилась на , кроме того, сумма цифр суммы нетривиальных должна делиться на . В ответ запишите количество найденных чисел.
Решение через циклы
def dev(n): # функция, которая возвращает сумму нетривиальных делителей числа s=0 for i in range(2,int(n**0.5)+1): if n%i==0: s+=i if n//i!=i: s+=n//i return s counter=0 for a1 in (’0123456789’): for a2 in (’0123456789’): s=’123’+a1+’654’+a2 # формируем число, удовлетворяющее маске n=str(dev(int(s))) # сумма делителей числа summa = 0 # разность цифр стоящих на нечётных и чётных местах for i in range(len(n)): if i % 2 == 0: # если число стоит на нечётном месте summa += int(n[i]) else: # если число стоит на чётном месте summa -= int(n[i]) if abs(summa)%11==0 and int(n) % 9 == 0: counter+=1 print(counter)
Решение через срезы
def divs(n): # функция, которая возвращает список делителей числа d = set() for i in range(2,int(n**0.5)+1): if n % i == 0: d.add(i) d.add(n//i) return sorted(d) # возвращаем отсортированный список делителей числа count = 0 for x in range(12306540,12396549+1): n = str(x) if ’123’ in n[:3] and ’654’ in n[4:7]: # проверка, что число удовлетворяет маске sm_divs = str(sum(divs(x))) # сумма делителей числа sm_odd_pos = sum(int(sm_divs[i]) for i in range(len(sm_divs)) if i % 2 == 0) # сумма цифр суммы делителей стоящих на нечётных местах sm_even_pos = sum(int(sm_divs[i]) for i in range(len(sm_divs)) if i % 2 != 0) # сумма цифр суммы делителей стоящих на чётных местах if abs(sm_even_pos-sm_odd_pos) % 11 == 0 and int(sm_divs) % 9 == 0: count += 1 print(count)
Ошибка.
Попробуйте повторить позже
Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы:
— символ «?» означает ровно одну произвольную цифру;
— символ «*» означает любую последовательность цифр произвольной длины; в том числе «*» может задавать и пустую последовательность.
Сколько существует натуральных чисел, соответствующих маске , у которых сумма нетривиальных делителей больше самого числа? В ответ запишите количество чисел.
Решение через циклы
def dev(n): # функция, которая возвращает сумму нетривиальных делителей числа s=0 for i in range(2,int(n**0.5)+1): if n%i==0: s+=i if n//i!=i: s+=n//i return s counter=0 for a1 in (’0123456789’): for a2 in (’0123456789’): s=’123’+a1+’654’+a2 # формируем число, удовлетворяющее маске n=int(s) if dev(n)>n: counter+=1 print(counter)
Решение через срезы
def divs(n): # функция, которая возвращает список делителей числа d = set() for i in range(2,int(n**0.5)+1): if n % i == 0: d.add(i) d.add(n//i) return sorted(d) # возвращаем отсортированный список делителей числа count = 0 for x in range(12306540,12396549+1): n = str(x) if ’123’ in n[:3] and ’654’ in n[4:7]: # проверка, что число удовлетворяет маске sm_divs = sum(divs(x)) # сумма делителей числа if sm_divs > x: count += 1 print(count)
Ошибка.
Попробуйте повторить позже
Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы:
— символ «?» означает ровно одну произвольную цифру;
— символ «*» означает любую последовательность цифр произвольной длины; в том числе «*» может задавать и пустую последовательность.
Среди натуральных чисел, не превышающих , найдите все числа, соответствующие маске и делящиеся на без остатка. В ответе запишите количество найденных чисел.
Решение через циклы
ans = 0 for i in range(10): for j in range(10): # пустая звёздочка s = ’1’ + str(i) + ’38’ + str(j) + ’70’ # формируем число, удовлетворяющее маске if int(s) % 11 == 0: ans += 1 #односимвольная звёздочка for w in range(10): s1 = ’1’ + str(i) + ’38’ + str(j) + ’70’ + str(w) # формируем число, удовлетворяющее маске if int(s1) % 11 == 0: ans += 1 #двухсимвольная звёздочка for w in range(10): for z in range(10): s2 = ’1’ + str(i) + ’38’ + str(j) + ’70’ + str(w) + str(z) # формируем число, удовлетворяющее маске if int(s2) % 11 == 0: ans += 1 print(ans)
Решение через срезы
count = 0 for x in range(1038070,10**9+1,11): # делаем цикл с шагом 11 для того чтобы проходиться только по кратным 11 числам n = str(x) if n[0] == ’1’ and ’38’ in n[2:4] and ’70’ in n[5:7]: # формируем число, удовлетворяющее маске count += 1 print(count)
Ошибка.
Попробуйте повторить позже
Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы:
— символ «?» означает ровно одну произвольную цифру;
— символ «*» означает любую последовательность цифр произвольной длины; в том числе «*» может задавать и пустую последовательность.
Среди натуральных чисел, не превышающих , найдите все числа, где сумма всех делителей числа соответствует маске *. В ответе запишите количество найденных чисел.
Решение через циклы
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 res = [] for i in range(1, 1000001): num = str(summa(i)) # сумма делителей числа if len(num) >= 3: if num[0] == ’1’ and int(num) % 100 == 38: # проверка, что сумма делителей удовлетворяет маске ans += 1 print(ans)
Решение через cрезы
def divs(n): # функция, которая возвращает список делителей d = set() for i in range(1, int(n**0.5)+1): if n % i == 0: d.add(i) d.add(n // i) return sorted(d) count = 0 for x in range(1,10**6+1): sm_divs = str(sum(divs(x))) # сумма делителей числа if sm_divs[0] == ’1’ and sm_divs[-2:] == ’38’: # проверка, что сумма делителей удовлетворяет маске count += 1 print(count)