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 секунд...

Так что это хорошо.

Нет остановки в этом, это просто медленно.

Другие вопросы по тегам