Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку [394441; 394505], числа, имеющие максимальное количество различных делителей. Если таких чисел несколько, то найдите минимальное из них. Выведите количество делителей найденного числа и два наибольших делителя в порядке убывания. Язык Python.​


shpilhay78: Что значит n, b, j=0, 0, 0
jasonmullerasd: переменным n, b, j присваиваем значение 0
shpilhay78: почему диапозон 20.1000+1
shpilhay78: в задаче ведь другой
jasonmullerasd: Для теста использовал эти, чтоб побыстрее было. Поставь вместо 20 и 1000 свои, только +1 не трогай
shpilhay78: понял, спасибо большое за ответ!
jasonmullerasd: Работает программа?
shpilhay78: да
jasonmullerasd: Поставь пожалуйста "Лучший ответ" если не сложно

Ответы

Ответ дал: SheWhoRunsOnTheWaves
1

Ответ:

Тут проще всего решетом Эратосфена пройтись.

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 - два наибольших делителя в порядке убывания, первый из них - само число

Вас заинтересует