Задача к ЕГЭ по информатике на тему «делители числа» №7

Найдите максимальное число на отрезке [1010101; 101010101], имеющее ровно 128 делителей, которое будет кратно 16. Выведите на экран в первой строке найденное число, а во второй все его нечетные делители в порядке возрастания.

def count_del(x): # функция возвращающая список делителей числа
    ans = [1, x]
    for i in range(2, int(x**0.5)+1):
        if x % i == 0:
            ans += [i]
            if i != x // i:
                ans += [x//i]
        if len(ans) > 128: # для оптимизации выходим из функции если у числа больше 128 делителей
            return ans
    return ans
for i in range(101010096, 1010101-1, -16): # для оптимизации перебираем от большего к меньшему c шагом -16
    # делаем перебор от первого числа меньше правой границы, кратного 16, так мы сможем проходиться только по числам кратным 16
    if len(count_del(i)) == 128:
        print(i, *sorted([i for i in count_del(i) if i % 2 != 0])) # вывод числа и всех его нечётных делителей
        break

Ответ: 101008512 1 3 9 11 27 33 99 297 2657 7971 23913 29227 71739 87681 263043 789129
Оцените статью
Я решу все!