Тема 25. Обработка целочисленной информации

25.03 Маски

Вспоминай формулы по каждой теме
Решай новые задачи каждый день
Вдумчиво разбирай решения
ШКОЛКОВО.
Готовиться с нами - ЛЕГКО!
Подтемы раздела обработка целочисленной информации
Решаем задачи

Ошибка.
Попробуйте повторить позже

Задача 1#24009

Азамат решил попробовать новый КрабсБургер в Макдоналдсе. Но поскольку он был закрыт, пришлось довольствоваться заказом в бургерной неподалёку. Номер заказа в данном заведении состоит из 6  цифр, и называется счастливым, если сумма первых трех цифр заказа равна сумме вторых трех цифр. Номера заказов не могут начинаться с нуля и идут по возрастанию. Азамат заметил, что номера заказов других людей частично совпадают с его, и вывел маску номера заказа, в которой могут встречаться следующие символы:

– Символ «?» означает ровно одну произвольную цифру;

– Символ «*» означает любую последовательность цифр произвольной длины; в том числе «*» может задавать и пустую последовательность.

Найдите количество таких номеров заказов, которые соответсвуют маске ?9  ?7  * и являются счастливыми.

Показать ответ и решение

Решение через циклы

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)

Ответ: 564

Ошибка.
Попробуйте повторить позже

Задача 2#26692

Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы:

— символ «?» означает ровно одну произвольную цифру;

— символ «*» означает любую последовательность цифр произвольной длины; в том числе «*» может задавать и пустую последовательность.

Среди натуральных чисел, не превышающих 109  , найдите все числа, соответствующие маске ?3579  ?6  * и делящиеся на 7  без остатка. В ответе запишите количество найденных чисел.

Показать ответ и решение

Решение через циклы

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) # вывод ответа

Ответ: 1428

Ошибка.
Попробуйте повторить позже

Задача 3#30219

Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы:

— символ «?» означает ровно одну произвольную цифру;

— символ «*» означает любую последовательность цифр произвольной длины; в том числе «*» может задавать и пустую последовательность.

Сколько существует натуральных чисел, соответствующих следующей маске 987?654?32  и делящихся на 88  без остатка. В ответ запишите в порядке возрастания найденные числа и соответствующее им частное от деления на 88  .

Показать ответ и решение

Решение через циклы

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)

Ответ: 9871654232 112177889 9873654032 112200614 9876654832 112234714 9878654632 112257439

Ошибка.
Попробуйте повторить позже

Задача 4#30220

Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы:

— символ «?» означает ровно одну произвольную цифру;

— символ «*» означает любую последовательность цифр произвольной длины; в том числе «*» может задавать и пустую последовательность.

Найдите такое натуральное число, соответствующее следующей маске ???1??1?  (число не может начинаться с нуля) и делящееся на 434343  без остатка. В ответ запишите найденное число и соответствующее ему частное от деления на 434343  .

 

Показать ответ и решение

Решение через циклы

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)

Ответ: 79919112 184

Ошибка.
Попробуйте повторить позже

Задача 5#30221

Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы:

— символ «?» означает ровно одну произвольную цифру;

— символ «*» означает любую последовательность цифр произвольной длины; в том числе «*» может задавать и пустую последовательность.

Сколько существует натуральных чисел, соответствующих следующей маске ??????  (число не может начинаться с нуля) и делящихся на 787878  без остатка. В ответ запишите в порядке возрастания найденные числа и соответствующее им частное от деления на 787878  .

Показать ответ и решение
for i in range(100000,1000000):  
    if i%787878==0:  
        print(i,i//787878)

Ответ: 787878 1

Ошибка.
Попробуйте повторить позже

Задача 6#30222

Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы:

— символ «?» означает ровно одну произвольную цифру;

— символ «*» означает любую последовательность цифр произвольной длины; в том числе «*» может задавать и пустую последовательность.

Сколько существует натуральных чисел, не превышающих 109  , соответствующих следующей маске 1  *23  ?34  и их сумма цифр делилась на 9  . В ответ запишите количество таких чисел.

Показать ответ и решение

Примечание. Если сумма цифр числа делится на 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)

Ответ: 1234

Ошибка.
Попробуйте повторить позже

Задача 7#30223

Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы:

— символ «?» означает ровно одну произвольную цифру;

— символ «*» означает любую последовательность цифр произвольной длины; в том числе «*» может задавать и пустую последовательность.

Сколько существует натуральных чисел, соответствующих следующей маске 123?  и их сумма цифр делилась на    3  . В ответ запишите в порядке возрастания найденные числа и соответствующий им результат от целочисленного деления на 3  .

Показать ответ и решение

Решение через циклы

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)

Ответ: 1230 410 1233 411 1236 412 1239 413

Ошибка.
Попробуйте повторить позже

Задача 8#30224

Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы:

— символ «?» означает ровно одну произвольную цифру;

— символ «*» означает любую последовательность цифр произвольной длины; в том числе «*» может задавать и пустую последовательность.

Сколько существует натуральных чисел, соответствующих следующей маске
123?123?123  и разность между суммой цифр, стоящих на нечетных местах, и суммой цифр, стоящих на четных местах делилась на 11  . В ответ запишите количество таких чисел.

Показать ответ и решение
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)

Ответ: 9

Ошибка.
Попробуйте повторить позже

Задача 9#30225

Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы:

— символ «?» означает ровно одну произвольную цифру;

— символ «*» означает любую последовательность цифр произвольной длины; в том числе «*» может задавать и пустую последовательность.

Сколько существует натуральных чисел, соответствующих следующей маске
123?123?123  и разность между суммой цифр, стоящих на нечетных местах, и суммой цифр, стоящих на четных местах делилась на 11  , а сумма всех цифр делилась на 3  . В ответ запишите количество таких чисел. Если таких чисел нет, в ответ запишите 0  .

Показать ответ и решение
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)

Ответ: 7

Ошибка.
Попробуйте повторить позже

Задача 10#30226

Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы:

— символ «?» означает ровно одну произвольную цифру;

— символ «*» означает любую последовательность цифр произвольной длины; в том числе «*» может задавать и пустую последовательность.

Сколько существует натуральных чисел, соответствующих следующей маске 90?123?  и чтобы число десятков, сложенное с учетверенным число единиц, было кратно 13  (то есть для числа 23  это 3∗ 4+ 2  ). В ответ запишите количество найденных чисел.

Показать ответ и решение

Решение через циклы

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)

Ответ: 10

Ошибка.
Попробуйте повторить позже

Задача 11#30227

Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы:

— символ «?» означает ровно одну произвольную цифру;

— символ «*» означает любую последовательность цифр произвольной длины; в том числе «*» может задавать и пустую последовательность.

Сколько существует натуральных чисел, соответствующих следующей маске 90?123?  и чтобы разряд десятков, сложенный с учетверенным разрядом единиц, был кратен 13  (то есть для числа 23  это 3∗4 + 2  ). Кроме того, сумма цифр должна быть кратна 3  . В ответ запишите в порядке возрастания найденные числа и соответствующий им результат от целочисленного деления на 39  .

Показать ответ и решение

Решение через циклы

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)

Ответ: 9001239 230801 9031239 231570 9061239 232339 9091239 233108

Ошибка.
Попробуйте повторить позже

Задача 12#30230

Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы:

— символ «?» означает ровно одну произвольную цифру;

— символ «*» означает любую последовательность цифр произвольной длины; в том числе «*» может задавать и пустую последовательность.

Найдите количество натуральных чисел, соответствующих маске ?1?2?3?4?5  (число не может начинаться с нуля), чтобы число делилось на ?1?2  (число не может начинаться с нуля). В ответ запишите количество чисел.

Показать ответ и решение
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)

Ответ: 2390

Ошибка.
Попробуйте повторить позже

Задача 13#30233

Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы:

— символ «?» означает ровно одну произвольную цифру;

— символ «*» означает любую последовательность цифр произвольной длины; в том числе «*» может задавать и пустую последовательность.

Сколько существует простых натуральных чисел, соответствующих следующей маске 987?654?3  . В ответ запишите количество чисел.

Показать ответ и решение

Решение через циклы

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)

Ответ: 12

Ошибка.
Попробуйте повторить позже

Задача 14#30234

Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы:

— символ «?» означает ровно одну произвольную цифру;

— символ «*» означает любую последовательность цифр произвольной длины; в том числе «*» может задавать и пустую последовательность.

Сколько существует натуральных чисел, соответствующих следующей маске 987?654?3  , чтобы сумма делителей давала остаток 1  от деления на 3  . В ответ запишите количетсво чисел.

Показать ответ и решение

Решение через циклы

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)

Ответ: 10

Ошибка.
Попробуйте повторить позже

Задача 15#30235

Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы:

— символ «?» означает ровно одну произвольную цифру;

— символ «*» означает любую последовательность цифр произвольной длины; в том числе «*» может задавать и пустую последовательность.

Сколько существует натуральных чисел, соответствующих следующей маске 987?654?3  , чтобы сумма цифр нетривиальных делителей делилась на 9  . В ответ запишите количетсво чисел.

Показать ответ и решение

Решение через циклы

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)

Ответ: 18

Ошибка.
Попробуйте повторить позже

Задача 16#30236

Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы:

— символ «?» означает ровно одну произвольную цифру;

— символ «*» означает любую последовательность цифр произвольной длины; в том числе «*» может задавать и пустую последовательность.

Сколько существует натуральных чисел, соответствующих следующей маске 987?654?3  , чтобы в сумме нетривиальных делителей разность между суммой цифр, стоящих на нечетных местах, и суммой цифр, стояших на четных местах делилась на 11  . В ответ запишите количество чисел.

Показать ответ и решение

Решение через циклы

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)

Ответ: 21

Ошибка.
Попробуйте повторить позже

Задача 17#30237

Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы:

— символ «?» означает ровно одну произвольную цифру;

— символ «*» означает любую последовательность цифр произвольной длины; в том числе «*» может задавать и пустую последовательность.

Сколько существует натуральных чисел, соответствующих следующей маске 123?654?  , чтобы в сумме нетривиальных делителей разность между суммой цифр, стоящих на нечетных местах, и суммой цифр, стоящих на четных местах делилась на 11  , кроме того, сумма цифр суммы нетривиальных должна делиться на 9  . В ответ запишите количество найденных чисел.

Показать ответ и решение

Решение через циклы

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)

Ответ: 5

Ошибка.
Попробуйте повторить позже

Задача 18#30238

Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы:

— символ «?» означает ровно одну произвольную цифру;

— символ «*» означает любую последовательность цифр произвольной длины; в том числе «*» может задавать и пустую последовательность.

Сколько существует натуральных чисел, соответствующих маске 123?654?  , у которых сумма нетривиальных делителей больше самого числа? В ответ запишите количество чисел.

Показать ответ и решение

Решение через циклы

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)

Ответ: 27

Ошибка.
Попробуйте повторить позже

Задача 19#32439

Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы:

— символ «?» означает ровно одну произвольную цифру;

— символ «*» означает любую последовательность цифр произвольной длины; в том числе «*» может задавать и пустую последовательность.

Среди натуральных чисел, не превышающих 109  , найдите все числа, соответствующие маске 1?38?70∗ и делящиеся на 11  без остатка. В ответе запишите количество найденных чисел.

Показать ответ и решение

Решение через циклы

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)

Ответ: 1011

Ошибка.
Попробуйте повторить позже

Задача 20#32446

Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы:

— символ «?» означает ровно одну произвольную цифру;

— символ «*» означает любую последовательность цифр произвольной длины; в том числе «*» может задавать и пустую последовательность.

Среди натуральных чисел, не превышающих 106  , найдите все числа, где сумма всех делителей числа соответствует маске 1  *38  . В ответе запишите количество найденных чисел.

Показать ответ и решение

Решение через циклы

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)

Ответ: 945
Рулетка
Вы можете получить скидку в рулетке!