@Aeolloups

Как можно оптимизировать процесс?

Вот код,благодаря которому мне надо найти натуральные делители чисел от 50 000 000 до 60 000 000, но их должно быть ровно 6 и обязательно должен быть 911
Но код будет выполняться настолько долго...
x = list(range(50000000,60000001))
l = []
for n in x:
    if n % 911 == 0:
        l.append(n)
j = []
for i in l:
    n = i
    d = [ x for x in range(2, n // 2 + 1) if n % x == 0 ]
    if len(d) == 6:
        j.append(i)
        print(i,":",d)
        print(len(j))
  • Вопрос задан
  • 77 просмотров
Решения вопроса 1
Vindicar
@Vindicar
RTFM!
Т.е. я правильно понял, что тебе нужно вывести делители для тех чисел между 50М и 60М, у которых 6 делителей и в числе делителей присутствует 911?

Начни с другого конца. Раз 911 должен присутствовать, то нет нужды перебирать все числа между 50М и 60М - достаточно перебирать только кратные 911. Их будет чуть меньше 11 тысяч, а не 10 миллионов.
for d in range(50000000 // 911 + 1, 60000000 // 911 + 1):

Далее разлагаешь d на делители, если делителей ровно 5 - добавляешь в список делителей 911 и выводишь.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@alexbprofit
Junior SE
Использовать numba для этих целей
Ответ написан
Комментировать
mayton2019
@mayton2019
Bigdata Engineer
Для поиска делителей достаточно искать до sqr(n). И не для всех чисел, а только для нечётных. Предварительно только на четность проверит n.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы