Как оптимизировать эту программу, ибо она не выводит ничего при таком большом промежутке, python
Найдите все натуральные числа, принадлежащие отрезку [35 000 000; 40 000 000], у которых ровно пять различных нечётных делителей (количество чётных делителей может быть любым). В ответе перечислите найденные числа в порядке возрастания. Вот такое вот задание должно решаться таким вот кодиком:
from math import sqrt
for i in range(35000000, 40000001):
dels_count = 0
for j in range(1, round(sqrt(i)) + 1):
if i % j == 0:
if j % 2 != 0:
dels_count += 1
par_del = i / j
if par_del % 2 != 0:
dels_count += 1
if dels_count == 5:
print(i)
но ничего не вылезает, хотя с промежутками поменьше всё пашет
Ответы (1 шт):
Автор решения: Stanislav Volodarskiy
→ Ссылка
Число 81 имеет ровно пять нечётных делителей. Я добавил в ваш код отладочную печать:
from math import sqrt
for i in range(81, 82):
dels_count = 0
for j in range(1, round(sqrt(i)) + 1):
if i % j == 0:
if j % 2 != 0:
dels_count += 1
print('found', i, j)
par_del = i / j
if par_del % 2 != 0:
dels_count += 1
print('found', i, par_del)
if dels_count == 5:
print(i)
$ python five_odd_divisors.py found 81 1 found 81 81.0 found 81 3 found 81 27.0 found 81 9 found 81 9.0
Главная проблема: делитель 9 учтён два раза. Меньшая проблема: деление целых в Питоне производит вещественный результат.
Поправьте эти проблемы и ваш код заработает. Время работы будет около часа. Наберитесь терпения.