Python - длительная остановка при расчете числа палиндрома
Я пытаюсь найти наибольшее число палиндромов, составленное из двух трехзначных чисел с моим кодом. он хорошо работает для 2-значных и 3-значных чисел, но когда я пробую его с 4-значными числами, он больше не работает. Нет вывода или "Процесс завершен с кодом выхода 0" в конце. Он просто остановился, как в бесконечном цикле.
palin = 0
for x in range(1, 10000):
for y in range(1, 10000):
mult = x * y
if str(mult) == str(mult)[::-1]:
if mult > palin:
palin = mult
print(palin)
Где я неправ? Я только что запустил Python около месяца назад, поэтому мой код все еще не эффективен
2 ответа
Ваш алгоритм не верен. Второй if
должен быть на том же уровне, что и mult = x*y
,
Я немного изменил твой код. С кодом ниже вы видите, что алгоритм не останавливается. Это просто супер медленно. Вам придется подождать несколько минут.
pa = 0
for x in range(1, 10000):
if x % 100 == 0:
print(x)
for y in range(x, 10000):
m = x*y
if str(m) == str(m)[::-1]:
if m > pa:
pa = m
print(pa)
Я изменил второй range(1, 10000)
в range(x, 10000)
чтобы исключить дубликаты, такие как 1*2 и 2*1 в один 1*2.
Если вы хотите ускорить, подумайте о переходе на C или C++.
Также вы можете изменить порядок итераций для экстремального ускорения
for x in range(10000, 0, -1):
for y in range(10000, 0, -1):
m = x*y
if str(m) == str(m)[::-1]:
print(m)
exit(0)
Это своего рода бесконечный цикл, вы знаете, это очень долго...
Но на самом деле каким-то образом (может быть, мой компьютер работает быстро:-)) код работал всего около 15 секунд...
Так что это хорошо.
Нет остановки в этом, это просто медленно.