Недавно я работал над проблемами 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. (Не проверял это, но это кажется разумным)
Код все еще, однако, недостаточно быстр. Какие оптимизации, программные или математические, я могу сделать, чтобы этот код работал быстрее?
Заранее благодарим всех, кто может помочь.