Числа Армстронга и палиндромы

Числа, которые «любуются собой»: одни равны сумме степеней своих цифр, другие читаются одинаково слева и справа.

Число Армстронга (нарциссическое) — число, равное сумме своих цифр, возведённых в степень, равную количеству цифр.

Эти диковинки касаются не делителей, а самих цифр в десятичной записи. Они показывают, как много красоты прячется в обычной позиционной системе счисления.

Числа Армстронга

Для $k$-значного числа правило таково: возведём каждую цифру в степень $k$ и сложим. Если получится исходное число — оно нарциссическое:

$$\overline{d_1 d_2 \ldots d_k} = d_1^k + d_2^k + \ldots + d_k^k.$$

Знаменитый пример — $153 = 1^3 + 5^3 + 3^3 = 1 + 125 + 27 = 153$. Среди трёхзначных таких ровно четыре. Найдём их и заодно проверим палиндромы.

def armstrong(n):
    digits = str(n)
    k = len(digits)
    return sum(int(d) ** k for d in digits) == n

arm = [n for n in range(100, 1000) if armstrong(n)]
print("Трёхзначные числа Армстронга:", arm)

def is_palindrome(n):
    s = str(n)
    return s == s[::-1]

pals = [n for n in range(100, 200) if is_palindrome(n)]
print("Палиндромы от 100 до 200:", pals)

Вывод:

Трёхзначные числа Армстронга: [153, 370, 371, 407]
Палиндромы от 100 до 200: [101, 111, 121, 131, 141, 151, 161, 171, 181, 191]

Палиндромы и алгоритм «перевернуть и сложить»

Число-палиндром читается одинаково в обе стороны: 121, 1331, 12321. С палиндромами связана красивая нерешённая задача: возьмите число, прибавьте к нему его же, записанное наоборот, и повторяйте. Многие числа быстро становятся палиндромами, но про число 196 неизвестно, станет ли оно когда-нибудь палиндромом (его называют числом Лишрел).

def reverse_and_add(n):
    steps = 0
    while str(n) != str(n)[::-1]:
        n = n + int(str(n)[::-1])
        steps += 1
    return n, steps

for start in [57, 89, 132]:
    result, steps = reverse_and_add(start)
    print(f"{start}: палиндром {result} за {steps} шагов")

Вывод:

57: палиндром 363 за 2 шагов
89: палиндром 8813200023188 за 24 шагов
132: палиндром 363 за 1 шагов

Как работает под капотом

Трюк с проверкой палиндрома s == s[::-1] использует «срез наоборот»: [::-1] переворачивает строку. Для чисел Армстронга мы строкой получаем цифры, возводим в нужную степень и сравниваем. Обратите внимание на число 89: оно становится палиндромом лишь за 24 шага, дорастая до тринадцатизначного 8813200023188 — поэтому «перевернуть и сложить» иногда требует терпения. А вот 196 не сошлось даже за миллиарды итераций.

Частые ошибки

Для чисел Армстронга степень — это число цифр, а не всегда 3: для четырёхзначных возводят в четвёртую степень. Не путайте нарциссические числа с совершенными — у них совсем разные правила. И помните, что «перевернуть и сложить» сходится не всегда (число 196) — задача открыта.

Итог

  • Число Армстронга равно сумме своих цифр в степени числа цифр.
  • Трёхзначные: 153, 370, 371, 407.
  • Палиндром читается одинаково в обе стороны.
  • «Перевернуть и сложить» обычно даёт палиндром, но для 196 это не доказано.
Проверьте себя
1. Почему 153 — число Армстронга?
AПотому что $1+5+3 = 9$
BПотому что $1^3 + 5^3 + 3^3 = 153$
CПотому что оно делится на 3
DПотому что 153 — палиндром
2. В какую степень возводят цифры для проверки числа Армстронга?
AВсегда в куб
BВ степень, равную количеству цифр числа
CВ квадрат
DВ степень, равную первой цифре
3. Что особенного в числе 196 для задачи «перевернуть и сложить»?
AОно палиндром само по себе
BНеизвестно, станет ли оно когда-нибудь палиндромом
CОно становится палиндромом за один шаг
DОно число Армстронга