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

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

Задача 1#49389

Среди целых чисел, принадлежащих числовому отрезку [173225; 217437], найдите числа, которые представляют собой произведение двух различных простых делителей, заканчивающихся на одну и ту же цифру. Запишите в ответе количество таких чисел и минимальное из них без разделителей.

Показать ответ и решение
def simple(x):# Функция,которая проверяет является число простым или нет
    return x > 1 and all(x % y for y in range(2,int(x**0.5)+1))
def divs(x):# Функция,которая возвращает делители определённого числа
    d = set()
    for i in range(2,int(x**0.5)+1):
        if x % i == 0:
            d |= {i,x//i}
    return sorted(d)
ans = []
for x in range(173225,217438):
    d = [i for i in divs(x) if simple(i)] #В списке d будут храниться делители числа x,которые при этом являются простыми числами
    if len(d) == 2 and (d[0] % 10 == d[1] % 10) and d[0]*d[1] == x:
        ans += [x]
print(len(ans),min(ans))

Ответ: 1710173231

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

Задача 2#88288

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

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

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

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

Например, маске 123*4?5 соответствуют числа 123405 и 12300405. Среди натуральных чисел, не превышающих 1010  , найдите все числа, соответствующие маске &123*321?, делящиеся на 2004 без остатка. В ответе запишите первые пять чисел в порядке возрастания, и через пробел – соответствующие им результаты деления этих чисел на 2004.

Показать ответ и решение
from itertools import product
def simple(x):return x > 1 and all(x % y for y in range(2,int(x**0.5)+1))
digits = ’0123456789’
odd_digits = ’13579’
res = []
for i in range(4):
    for digit_1 in product(odd_digits,repeat = i):
        for j in range(4):
            for digit_2 in product(digits,repeat = j):
                for digit_3 in product(digits,repeat = 1):
                    res += [int(’’.join(digit_1) + ’123’ + ’’.join(digit_2) + ’321’ + ’’.join(digit_3))]
for x in sorted(set(res)):
    if x <= 10**10 and x % 2004 == 0:
        print(x,x//2004)

Ответ: 123853212 61803 1230063216 613804 1231063212 614303 1235073216 616304 1236073212 616803

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

Задача 3#88287

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

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

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

Например, маске 123*4?5 соответствуют числа 123405 и 12300405. Среди натуральных чисел, не превышающих  109  , найдите все числа, соответствующие маске 3*3?12, делящиеся на 3952 без остатка, у которых также сумма цифр числа является нечётной. В ответе запишите первые пять чисел в порядке возрастания, и через пробел – соответствующие им результаты деления этих чисел на 3952.

Показать ответ и решение
Способ решения 1:
from fnmatch import fnmatch
count = 0
for x in range(35568,10**9+1,3952):
    if fnmatch(str(x),’3*3?12’) and sum(map(int,str(x))) % 2 != 0:
        count += 1
        print(x,x//3952)
        if count > 4:
            break
Способ решения 2:
from itertools import product
digits = ’0123456789’
res = []
for i in range(5):
    for digit_1 in product(digits,repeat = i):
        for digit_2 in product(digits,repeat = 1):
            res += [int(’3’+’’.join(digit_1) + ’3’ + ’’.join(digit_2) + ’12’)]
for x in sorted(set(res)):
    if x <= 10**9 and x % 3952 == 0 and sum(map(int,str(x))) % 2 != 0:
        print(x,x//3952)


Ответ: 303043312 76681 305513312 77306 306303712 77506 323593712 81881 332683312 84181

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

Задача 4#88286

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

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

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

Например, маске 123*4?5 соответствуют числа 123405 и 12300405. Среди натуральных чисел, не превышающих  107  , найдите все числа, соответствующие маске 2*56??, делящиеся на 2048 без остатка, у которых более 5 делителей, соответствующих маске 1*4. В ответе запишите все найденные числа в порядке возрастания, и через пробел – соответствующие им результаты деления этих чисел на 2048.

Показать ответ и решение
Способ решения 1:
from fnmatch import fnmatch
def divs(x):#функция поиска делителей для определенного числа
    d = set()
    for i in range(1,int(x**0.5)+1):
        if x % i == 0:
            d |= {i,x//i}
    return sorted(d)
for x in range(4096,10**7+1,2048):
    if fnmatch(str(x),’2*56??’):#если число удовлетворяет маске числа
        d = [i for i in divs(x) if fnmatch(str(i),’1*4’)]#делаем список,в котором будут делители,
        #удовлетворяющие маске делителей.
        if len(d) > 5:
            print(x,x//2048)
Способ решения 2:
from itertools import product
def divs(x):
    d = set()
    for i in range(1,int(x**0.5)+1):
        if x % i == 0:
            d |= {i,x//i}
    return sorted(d)
digits = ’0123456789’
res = []#список, в котором будут числа удовлетворяющие маске числа
need_div = []#список, в котором будут числа удовлетворяющие маске делителей
#формирование чисел по определенной маске чисел
for i in range(3):
    for digit_1 in product(digits,repeat = i):
        for digit_2 in product(digits,repeat = 1):
            for digit_3 in product(digits,repeat = 1):
                res += [int(’2’ + ’’.join(digit_1) + ’56’ + ’’.join(digit_2) + ’’.join(digit_3))]
#формирование чисел по определенной маске делителей
for i in range(6):
    for digit_1 in product(digits,repeat = i):
        need_div += [int(’1’+’’.join(digit_1) + ’4’)]
for x in sorted(set(res)):#проход по всевозможным получившимся числам
    if x <= 10**7 and x % 2048 == 0:
        d = [i for i in divs(x) if i in need_div]#список, в котором будут делители числа,
        # удовлетворяющие маске делителей
        if len(d) > 5:#если таких делителей больше 5
            print(x,x//2048)

Ответ: 2715648 1326

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

Задача 5#88285

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

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

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

Например, маске 123*4?5 соответствуют числа 123405 и 12300405. Среди натуральных чисел, не превышающих  109  , найдите все числа, соответствующие маске 1*3577?0, делящиеся на 1975 без остатка. В ответе запишите все найденные числа в порядке возрастания, и через пробел – соответствующие им результаты деления этих чисел на 1975.

Показать ответ и решение
Способ решения 1:
from fnmatch import fnmatch
for x in range(1358800,10**9+1,1975):
    if fnmatch(str(x),’1*3577?0’):
        print(x,x//1975)
Способ решения 2:
’’’
Идея решения заключается в том, чтобы по частям собирать число, удовлетворяющее маске
и затем проверять его на кратность.
Такое решение оптимальнее по времени поскольку мы не проверяем числа не подходящие по маске,
а сразу составляем те,
что нам подходят.
’’’

from itertools import product#импортируем модуль product из itertools
digits = ’0123456789’#всевозможные цифры
res = []#список, в который мы будем сохранять числа
for i in range(3):#проведя анализ, можно понять, что в звёздочке не может быть больше двух цифр,
    #по этой причине делаем цикл от 0 до 2 включительно.
    for digit_1 in product(digits,repeat = i):#делаем произвольную подпоследовательность из цифр,
        #таким способом, мы симулируем звёздочку
        for digit_2 in product(digits,repeat = 1):#такой записью, мы симулируем знак вопроса
            res += [int(’1’ + ’’.join(digit_1) + ’3577’ + ’’.join(digit_2) + ’0’)]
            #собираем нашу маску по частям, функция join переводит элементы кортежа, списка в строку.
for x in sorted(set(res)):#проходимся по всем получившимся числам
    if x <= 10**9 and x % 1975 == 0:
        print(x,x//1975)#вывод числа и его частного

Ответ: 106357700 53852 112357750 56890 185357700 93852 191357750 96890

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

Задача 6#88284

Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку [316312; 451234] числа, у которых произведение нетривиальных делителей кратна 14. В ответ укажите количество таких чисел и через пробел сумму цифр максимального произведения нетривиальных делителей подходящего числа.

Показать ответ и решение
import math
def divs(x):
    d = set()
    for i in range(2, int(x ** 0.5) + 1):
        if x % i == 0:
            d |= {i, x // i}
    return sorted(d)
ans = []
for x in range(316312, 451235):
    m = divs(x)
    if len(m) > 0:
        d = math.prod(m)  # воспользуемся модулем math и функцией prod,
        # которая вычисляет произведение всех элементов списка
        if d % 14 == 0:
            ans += [d]
print(len(ans),sum(map(int,str(max(ans)))))

Ответ: 9638 1953

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

Задача 7#88283

Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку [414400; 561293] числа, у которых сумма нетривиальных делителей больше числа и при этом не кратна 6. В ответ укажите количество таких чисел и через пробел максимальную сумму цифр подходящего числа.

Показать ответ и решение
def divs(x):
    d = set()
    for i in range(2,int(x**0.5)+1):
        if x % i == 0:
            d |= {i,x//i}
    return sorted(d)
count = 0
mx_sm = 0
for x in range(414_400,561_294):
    d = sum(divs(x))
    if d > x and d % 6 != 0:
        count += 1
        mx_sm = max(mx_sm,sum(map(int,str(x))))
print(count,mx_sm)

Ответ: 36356 48

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

Задача 8#88282

Напишите программу, которая выведет 5 наименьших чисел, больших 800000 у которых ровно сумма нечётных нетривиальных делителей чётна, а сумма чётных нетривиальных делителей оканчивается на 4. Для каждого числа укажите через пробел количество его нетривиальных делителей.

Показать ответ и решение
def divs(x):
    d = set()
    for i in range(2,int(x**0.5)+1):
        if x % i == 0:
            d |= {i,x//i}
    return sorted(d)
count = 0
for x in range(800_001,10**6):
    d = divs(x)
    odd = [x for x in d if x % 2 != 0]
    even = [x for x in d if x % 2 == 0]
    if sum(odd) % 2 == 0 and sum(even) % 10 == 4:
        print(x,len(d))
        count += 1
        if count > 4:
            break

Ответ: 806450 16 814088 34 816642 28 819200 46 821762 4

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

Задача 9#88281

Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку [612376; 875324] числа, у которых ровно 5 простых делителей. В ответ укажите количество нечётных чисел среди таких чисел и через пробел сумму цифр подходящих чисел.

Показать ответ и решение
def simple(x):
    return x > 1 and all(x % y for y in range(2,int(x**0.5)+1))
def divs(x):
    d = set()
    for i in range(1,int(x**0.5)+1):
        if x % i == 0:
            d |= {i,x//i}
    return sorted(d)
ans = []
sm = 0
for x in range(612376,875325):
    d = [i for i in divs(x) if simple(i)]
    if len(d) == 5:
        if x % 2 != 0:
            ans += [x]
        sm += sum(map(int,str(x)))
print(len(ans),sm)

Ответ: 1541 365625

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

Задача 10#88280

Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку [412412; 535242] числа, у которых сумма нетривиальных делителей кратна 184 и сумма цифр суммы нетривиальных делителей является простым числом. В ответ укажите количество таких чисел и через пробел минимальное число, большее 500000.

Показать ответ и решение
def simple(x):return x > 1 and all(x % y for y in range(2,int(x**0.5)+1))
def divs(x):
    d = set()
    for i in range(2,int(x**0.5)+1):
        if x % i == 0:
            d |= {i,x//i}
    return sorted(d)
ans = []
for x in range(412412,535242):
    d = sum(divs(x))
    if d % 184 == 0 and simple(sum(map(int,str(d)))):
        ans += [x]
print(len(ans),min(x for x in ans if x > 500000))

Ответ: 133 500191

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

Задача 11#88279

Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку [503123; 533211] числа, у которых сумма и количество простых делителей является простым числом. В ответ укажите количество таких чисел и через пробел разность максимального и минимального числа.

Показать ответ и решение
def simple(x):return x > 1 and all(x % y for y in range(2,int(x**0.5)+1))
def divs(x):
    d = set()
    for i in range(1,int(x**0.5)+1):
        if x % i == 0:
            d |= {i,x//i}
    return sorted(d)
ans = []
for x in range(503123,533212):
    d = [i for i in divs(x) if simple(i)]
    if simple(len(d)) and simple(sum(d)):
        ans += [x]
print(len(ans), max(ans)-min(ans)

Ответ: 1686 30070

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

Задача 12#88278

Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку [312322; 486711] числа, у которых количество чётных делителей равно количеству нечётных делителей и при этом сумма делителей является нечётной. В ответ укажите количество таких чисел.

Показать ответ и решение
def divs(x):
    d = set()
    for i in range(1,int(x**0.5)+1):
        if x % i == 0:
            d |= {i,x//i}
    return sorted(d)
ans = []
for x in range(312322,486712):
    d = divs(x)
    odd = [x for x in d if x % 2 != 0]
    even = [x for x in d if x % 2 == 0]
    if len(even) == len(odd) and sum(d) % 2 != 0:
        ans += [x]
print(len(ans))

Ответ: 49

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

Задача 13#88277

Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку [153749; 251674] числа, у которых есть ровно 6 делителей, оканчивающихся на одну и ту же цифру. В ответ укажите количество таких чисел и через пробел целую часть среднего арифметического таких чисел.

Показать ответ и решение
def divs(x):
    d = set()
    for i in range(1,int(x**0.5)+1):
        if x % i == 0:
            d |= {i,x//i}
    return sorted(d)
ans = []
for x in range(153749,251675):
    sm = [[] for i in range(10)]#двумерный список, в котором мы будем хранить делитель в определённых ячейках,
    #в зависимости от их последней цифры
    d = divs(x)
    if len(d) >= 6:
        for div in d:#проход по делителям числа
            sm[div % 10].append(div)#распределяем делители в различные списки в зависимости от их последней цифры
        for i in sm:#проход по группам делителей, оканчивающихся на одну и ту же цифру
            if len(i) == 6:#если количество делителей равно 6
                ans += [x]#то добавляем число
                break
#вывод количества чисел и среднего арифметического таких чисел
print(len(ans),sum(ans)/len(ans))

Ответ: 7506 202960

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

Задача 14#88276

Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку [15374; 55166] пары чисел с одинаковой суммой цифр чисел и одинаковой суммой чисел их делителей. В ответ запишите количество таких пар и через пробел значение суммы цифр чисел, с которой больше всего встречается таких пар.

Показать ответ и решение
def divs(x):
    d = set()
    for i in range(1,int(x**0.5)+1):
        if x % i == 0:
            d |= {i,x//i}
    return sorted(d)
d = [[] for i in range(55)]#двумерный массив,
# в котором мы будем хранить суммы делителей чисел в определенной ячейке,
# исходя из суммы цифр самого числа
for x in range(15374,55167):
    sm = sum(map(int,str(x)))#считаем сумму цифр числа
    sum_divs = sum(divs(x))#считаем сумму делителей числа
    d[sm].append(sum_divs)#складываем в определенную ячейку сумму делителей
count = {x:0 for x in range(55)}#словарь, у которого в качестве ключа числа от 0 до 55,
#в качестве значения будет количество подходящих пар.
#пример, 13:5 - это означает, что есть 5 пар среди чисел, у которых сумма цифр равна 13

for i in range(len(d)):#проход по двумерному списку
    if len(d[i]) > 1:#если возможно составить пару
        for j in range(len(d[i])-1):#перебираем всевозможные пары в списке
            for k in range(j+1,len(d[i])):
                if d[i][j] == d[i][k]:#если суммы делителей равны
                    count[i] += 1#то увеличиваем счётчик под индексом i,
                    # который обозначает чему равна сумма цифр чисел в этом списке
#вывод количества таких пар и значения суммы цифр, для которой собралось больше всего таких пар
print(sum(count.values()),*[x for x in count.keys() if count[x] == max(count.values())])

Ответ: 21619 21

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

Задача 15#88275

Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку [8077; 331323] cуперсовершенные числа. В ответ укажите количество таких чисел и через пробел сумму таких чисел. Суперсовершенные числа - это числа, чья сумма делителей числа суммы делителей самого числа вдвое больше изначального числа. Примеры: число 16 - его сумма делителей равна 31, сумма делителей числа 31 равна 32 - число 32 в два раза больше числа 16; число 4 - его сумма делителей равна 7, сумма делителей числа 7 равна 8 - число 8 в два раза больше числа 4.

Показать ответ и решение
def divs(x):
    d = set()
    for i in range(1,int(x**0.5)+1):
        if x % i == 0:
            d |= {i,x//i}
    return sorted(d)
ans = []
for x in range(8077,331323+1):
    d = sum(divs(x))
    if sum(divs(d)) / 2 == x:
        ans += [x]
print(len(ans),sum(ans))

Ответ: 2 327680

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

Задача 16#88274

Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку [100; 100000], пары дружественных чисел. В ответ укажите количество таких пар и через пробел минимальную чётную сумму такой пары. Дружественные числа — это два различных натуральных числа, для которых сумма всех собственных делителей (исключая в качестве делителя само число) первого числа равна второму числу и наоборот, сумма всех собственных делителей (исключая в качестве делителя само число) второго числа равна первому числу. Пример, числа 220 и 284. У числа 220 делителями являются числа: 1,2,5,10,11,20,22,44,55,110 их сумма равна 284. У числа 284 делителями являются числа: 1,2,4,71,142 их сумма равна 220.

Показать ответ и решение
def divs(x):#функция поиска делителей определенного числа
    d = {1}#изначально включаем единицу
    for i in range(2,int(x**0.5)+1):
        if x % i == 0:
            d |= {i,x//i}
    return sorted(d)
L = 100#левая граница отрезка
M = 100001#правая граница отрезка
d = {x:sum(divs(x)) for x in range(L,M)}
#словарь, в котором в качестве ключа будет число из промежутка,
# а в качестве значения будет сумма делителей (за исключением самого числа) данного числа
# для оптимизации в словаре мы будем оставлять только те числа,
# чья сумма делителей находится в пределах нашего отрезка
count = []
mn = 10**20
for key in d.keys():#проходимся по всевозможным числам из отрезка
    if key == d.get(d[key]) and d[key] != key:#если первое число равно сумме делителей второго числа,
        #и при этом сумма делителей первого числа не равна первому числу
        if sorted([key,d[key]]) not in count:#тогда проверяем,
        #что если ранее такая пара чисел не была в списке
            #P.S. d[key] - значение суммы делителей числа key это не только сумма делителей,
            # но и также второе число пары дружественных чисел
            count.append([key,d[key]])#то добавляем
print(len(count),min(sum(x) for x in count if sum(x) % 2 == 0))
#вывод количества таких пар и минимальной чётной суммы таких пар

Ответ: 13 504

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

Задача 17#86470

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

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

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

Например, маске 123*4?5 соответствуют числа 123405 и 12300405.

Среди натуральных чисел, не превышающих 107  , найдите все числа, соответствующие маске 3*4?50, а количество четных цифр числа больше количества нечетных.

В ответ запишите одно число – количество найденных чисел.

Показать ответ и решение
t = []
for x in range(10**3, 10**7+1):
    s = str(x)
    cht = [int(i) for i in s if int(i) % 2 == 0]
    ncht = [int(i) for i in s if int(i) % 2 != 0]
    if (s[0] == ’3’) and (s[-2:] == ’50’) and (s[-4] == ’4’) and len(cht) > len(ncht):
        t.append(x)
print(len(t))

Ответ: 530

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

Задача 18#86469

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

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

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

Например, маске 123*4?5 соответствуют числа 123405 и 12300405.

Среди натуральных чисел, не превышающих 108  , найдите все числа, являющимися полными квадратами, соответствующие маске 82??9* и имеющих более 25 делителей.

В ответ запишите найденные числа в порядке возрастания через пробел.

Показать ответ и решение
for x in range(10**4, 10**8+1):
    c = set()
    s = str(x)
    if x**0.5 == int(x**0.5):
        for i in range(1, int(x**0.5)+1):
            if x % i == 0 and s[:2] == ’82’ and s[4] == ’9’:
                c.add(i)
                c.add(x//i)
    if len(c) > 25:
        print(x)

Ответ: 8236900 82119844 82519056 82719025 82919236

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

Задача 19#86468

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

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

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

Например, маске 123*4?5 соответствуют числа 123405 и 12300405.

Среди натуральных чисел, не превышающих 1012  , найдите все числа, соответствующие маске 137?15*7*50, делящиеся на 178750 без остатка.

В ответ запишите пары найденных чисел в порядке возрастания через пробел: найденное число и частное от деления на 178750.

Показать ответ и решение
from fnmatch import fnmatch
for x in range(137101250,10**12+1,178750):
    if fnmatch(str(x),’137?15*7*50’):
        print(x,x//178750)

Ответ: 137015271250 766519 137015628750 766521 137115013750 767077 137115371250 767079 137115728750 767081 137215113750 767637 137215471250 767639 137215828750 767641 137315213750 768197 137315571250 768199 137315928750 768201 137415313750 768757 137415671250 768759 137515413750 769317 137515771250 769319 137615513750 769877 137615871250 769879 137715613750 770437 137715971250 770439 137815713750 770997 137915098750 771553 137915813750 771557

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

Задача 20#86467

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

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

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

Например, маске 123*4?5 соответствуют числа 123405 и 12300405.

Среди натуральных чисел, находящихся в интервале [103;106  ], найдите все числа, соответствующие маске 16* и имеющих ровно 13 нетривиальных делителей.

В ответ запишите найденные числа в порядке возрастания через пробел.

Показать ответ и решение
for x in range(10**3, 10**6+1):
    c = set()
    s = str(x)
    if x**0.5 == int(x**0.5):
        for i in range(2, int(x**0.5)+1):
            if x % i == 0 and s[:2] == ’16’:
                c.add(i)
                c.add(x//i)
    if len(c) == 13:
        print(x)

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