Project Euler 5 на Python - Как я могу оптимизировать свое решение?

Недавно я работал над проблемами Project Euler на Python. Я новичок в Python и все еще немного новичок как программист.

В любом случае, я столкнулся с проблемой, связанной со скоростью, при написании решения проблемы №5. Проблема в том,

«2520 - наименьшее число, которое можно без остатка разделить на каждое из чисел от 1 до 10. Какое наименьшее положительное число делится без остатка на все числа от 1 до 20? "

Я проверил кое-что и не смог найти ничего по этой проблеме, относящейся конкретно к Python. Было несколько завершенных скриптов, но я хочу по возможности избегать просмотра чужого кода полностью, вместо этого я хочу улучшить свой собственный.

Написанный мной код успешно работает для примера 2520 и диапазона от 1 до 10 и должен быть напрямую изменен для работы с вопросом. Однако, запустив его, я не получаю ответа.Предположительно, это очень большое число, и код работает недостаточно быстро. Печать текущего проверяемого числа, кажется, подтверждает это, достигая нескольких миллионов без получения ответа.

Код в его текущей реализации выглядит следующим образом:

rangemax = 20
def div_check(n):
    for i in xrange(11,rangemax+1):
        if n % i == 0:
            continue
        else:
            return False
    return True

if __name__ == '__main__':
   num = 2
   while not div_check(num):
       print num
       num += 2
   print num

Я уже внес пару изменений, которые, как мне кажется, должны повысить скорость. Во-первых, чтобы число делилось на все числа от 1 до 20, оно должно быть четным, поскольку только четные числа делятся на 2. Следовательно, я могу увеличивать на 2 вместо 1. Кроме того, хотя я не думал о сам, я обнаружил, что кто-то указал, что число, делящееся на 11-20, делится на 1 до 10. (Не проверял это, но это кажется разумным)

Код все еще, однако, недостаточно быстр. Какие оптимизации, программные или математические, я могу сделать, чтобы этот код работал быстрее?

Заранее благодарим всех, кто может помочь.

9
задан iCodez 22 January 2015 в 19:56
поделиться