Я недавно работал над проблемами Project Euler в Python.Я довольно новичок в Python, и все еще несколько новичок в качестве программиста.
В любом случае, я столкнулся с проблемой скорости, кодирующей решение проблемы № 5.Проблема в том, что
"2520 - это наименьшее число, которое можно разделить на каждое из чисел от 1 до 10 без остатка. Наименьшее положительное число, которое равномерно делится на все числа от 1to 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. (Не проверял это число, но кажется разумным)
Код все еще, однако, не быстрыйдовольно.Какие оптимизации, программные или математические, я могу сделать, чтобы этот код работал быстрее?
Заранее спасибо всем, кто может помочь.