Если ваша программа работает медленно, и у вас есть такие циклы:
for z in range(100, 1000):
for y in range(100, 1000):
for x in range(1, 1000000):
Тогда вопрос, который вы должны задать себе: «Сколько раз будет выполняться тело самого внутреннего цикла?» (тело вашего внутреннего цикла - это код, начинающийся с: x = str(x)
)
В этом случае это легко понять. Внешний цикл будет выполнен 900 раз. Для каждой итерации средний цикл также будет выполняться 900 раз, что составляет 900 × 900 или 810 000 раз. Затем для каждой из этих 810 000 итераций внутренний цикл будет выполнен 999 999 раз. Я думаю, мне нужно долго, чтобы рассчитать, что:
>>> 900*900*999999
809999190000L
Другими словами, вы проводите проверку палиндрома почти 810 миллиардов раз. Если вы хотите включить рекомендуемый лимит Project Euler в 1 минуту для каждой проблемы, вы можете немного оптимизировать :-) (см. Комментарий Дэвида)