Поиск чисел Армстронга в диапазоне

Положительное целое число называется числом Армстронга порядка n, если оно равно сумме n-ных степеней своих цифр:

abcd... = a^n + b^n + c^n + d^n + ...

Например, 153 = 1*1*1 + 5*5*5 + 3*3*3, значит 153 — число Армстронга. В этой задаче нужно найти все такие числа в заданном интервале.

Что нужно знать

Перед изучением примера полезно понимать:

Пример

# Program to check Armstrong numbers in a certain interval

lower = 100
upper = 2000

for num in range(lower, upper + 1):

   # order of number
   order = len(str(num))

   # initialize sum
   sum = 0

   temp = num
   while temp > 0:
       digit = temp % 10
       sum += digit ** order
       temp //= 10

   if num == sum:
       print(num)

Вывод

153
370
371
407
1634

Как это работает

Границы диапазона задаются переменными lower и upper. Внешний цикл for с range(lower, upper + 1) перебирает все целые числа в этом интервале.

Для каждого числа определяется его порядок — количество цифр (len(str(num))). Затем внутренний while извлекает цифры одну за другой через остаток от деления на 10 (temp % 10), возводит каждую в степень, равную порядку, и накапливает сумму. Целочисленное деление temp //= 10 отбрасывает последнюю цифру.

Если в итоге накопленная сумма совпадает с исходным числом, оно выводится. Чтобы проверить другой интервал, измените lower и upper (нижняя граница должна быть меньше верхней).