Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку [394441; 394505], числа, имеющие максимальное количество различных делителей. Если таких чисел несколько, то найдите минимальное из них. Выведите количество делителей найденного числа и два наибольших делителя в порядке убывания. Язык Python.
Ответы
Ответ:
Тут проще всего решетом Эратосфена пройтись.
from math import sqrt
v = [0] * 394506 # помним, что номер первой ячейки 0, поэтому длина на 1 больше
# решето Эратосфена: в ячейках массива в итоге окажется кол-во делителей номеров ячеек
for i in range(1, 394506):
for j in range(i, 394506, i):
v[j] += 1
m = max(v[394441:394506]) # максимальное кол-во делителей
# вывод
for i in range(394441, 394506):
if v[i] == m:
print(v[i])
print(i, end=' ') # число всегда делится само на себя
# теперь выводим еще один делитель
for j in range(i-1, 1, -1):
if i % j == 0:
print(j)
break
break
Ответ:
48 - кол-во делителей
394450 197225 - два наибольших делителя в порядке убывания, первый из них - само число