Проблема в вашем коде - общая логика. Вы смотрите на каждое положительное целое число, пытаясь решить, является ли оно треугольным, квадратным и палиндромом.
Однако вы не проверяете, является ли nm
треугольным числом или квадратом. Вы фактически вычисляете nm
th треугольное число и nm
th квадратное число. За исключением первых, 0
и 1
, они никогда не равны друг другу или nm
, поэтому ваши тесты не пройдены. Вместо этого вам следует проверить, является ли nm
треугольным числом и nm
- квадратным числом. Эти тесты сложнее для очень больших значений nm
, и я рекомендую другой подход.
Ваша проверка палиндрома также не проходит. Вы правильно нашли число, которое является инверсией nm
, но вы должны проверить это по nm
. Вместо этого вы проверяете его по nm
-му треугольному и квадратному числу.
Все эти проблемы могут быть исправлены, но ваша программа будет чрезвычайно медленной. На этой странице Википедии показаны первые 12 квадратных треугольных чисел. Последний имеет 16 цифр. За исключением первых двух, а именно 0
и 1
, ни один не является палиндромом. Могут быть палиндромы выше, но вашей программе потребуется почти вечность, чтобы найти их.
Я рекомендую другой подход. Используйте намного более быстрый метод, чтобы пройти через квадратные треугольные числа, избегая всех других чисел. Страница Википедии дает несколько методов. Затем проверьте каждый из них, если это палиндром. Python может обрабатывать большие числа, хотя вычисления будут выполняться медленнее, поэтому вы можете найти палиндром.
Вот простой способ перебрать только квадратные треугольные числа, пропуская 0
и 1
, которые являются тривиальными.
nold = 0
n = 1
for nm in infinity(2):
nold, n = n, 34 * n - nold + 2
# check if n is a palindrome
Это, конечно, бесконечный цикл. Обратите внимание, что nm
фактически никогда не используется, но это индекс квадратного треугольного числа n
. Расчет происходит из первого рекуррентного отношения здесь . Объяснение включает решение уравнения Пелла, которое обычно использует непрерывные дроби. Дайте мне знать, если вам действительно нужно больше информации об этом, хотя статья в Википедии объясняет это больше.