Найдите максимальное число на отрезке [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