TL; DR: Dziś będzie troszkę matematyki rekreacyjnej, jak pogardliwie zwykli byli nazywać tego typu łamigłówki Prawdziwi Matematycy, czyli - jak mawiał Wieszcz - ludzie, którzy potrafią policzyć do Dwudziestu bez zdejmowania Butów.
Liczba narcystyczna to taka liczba k-cyfrowa, która jest sumą k-tych potęg własnych cyfr.
Ktoś upierdliwy (są tacy na sali?) mógłby się przypieprzyć do warstwy językowej powyższej definicji - i miałby absolutną rację. Cyfr nie da się podnosić do potęgi. Ale ponieważ żaden z Czytelników tego nie wyłapał, przymkniemy oko.
Czyli jeszcze raz: bierzemy liczbę k-cyfrową, dzielimy ją na pojedyncze cyfry, każdą z tych cyfr podnosimy...
Zastanawiał się ktoś może, dlaczego mówi się "cyfr i liter" a nie "litr i cyfer"? Nie? To dobrze, ja też nie. A co z "szewc i krawiec" vs "krawc i szewiec"? Hm.
... podnosimy, powiadam, do k-tej potęgi, a następnie wyniki owego potęgowania sumujemy. W wyniku dostajemy liczbę, od której zaczęliśmy.
Na przykład 153: 13 + 53 + 33 = 153.
Czy jest takich liczb więcej?
Sprawdźmy:
for n in range(10, 10000):
wykladnik = len(str(n))
cyfry = list(map(int, str(n)))
suma = 0
for c in cyfry:
suma += c ** wykladnik
if suma == n:
print(n)
Na wyjściu powyższego skryptu dostajemy:
153
370
371
407
1634
8208
9474
Przy okazji, proszę zauważyć, że wykluczyłem liczby 0-9, które są przypadkiem trywialnym.
A co z większymi zakresami? Zmieniłem w powyższym kodzie 10000 na 10000000 i doszły jeszcze cztery dodatkowe liczby narcystyczne:
54748
92727
93084
548834
Dodajemy malutką optymalizację:
for n in range(10, 100000000):
wykladnik = len(str(n))
cyfry = list(map(int, str(n)))
suma = 0
for c in cyfry:
suma += c ** wykladnik
if suma > n:
break
if suma == n:
print(n)
Zwiększamy zakres do 100000000 (stu milijonów):
(po chwili oczekiwania):
1741725
4210818
9800817
9926315
24678050
24678051
88593477
Na liście pojawiły się dwie liczby sąsiadujące ze sobą. Ciekawe, czy jest więcej takich przypadków (nie licząc 370 - 371 powyżej). Hm. Skrypt w Pythonie zaczął już niemiłosiernie mulić, więc pomyślałem sobie, że można by go jeszcze jakoś przyspieszyć. Tylko, kurdę, jak? Tu już mi się oleum skończyło, więc...
{guglguglguglguglgugl...guglgugl...guglguglgugl...}
...ha! Okazuje się, że liczb narcystycznych jest łącznie 88. Jeżeli komuś się akurat popsuła gugielnica, albo jeżeli ktoś jest zbyt leniwy, żeby z niej skorzystać, ale pomimo to zżera go (lub ją) ciekawość, podaję tu pełną listę:
1, 2, 3, 4, 5, 6, 7, 8, 9, 153, 370, 371, 407, 1634, 8208, 9474, 54748, 92727, 93084, 548834, 1741725, 4210818, 9800817, 9926315, 24678050, 24678051, 88593477, 146511208, 472335975, 534494836, 912985153, 4679307774, 32164049650, 32164049651
Przy okazji widać, że dwie największe liczby narcystyczne też ze sobą sąsiadują.
Dowiedziałem się również, że inna nazwa tych liczb to liczby Armstronga. Nie wiem tylko, czy chodzi o tego trębacza, czy może astronautę. A może o Williama Warda Armstronga, kanadyjskiego matematyka? Hm. Tyle pytań, tak niewiele czasu...
Zaprawdę, powiadam Wam, nie wiadomo, co z tą całą wiedzą robić.
Armstrong…Armstrong.. Musi o tego cyklistę chodzić.
Z pewnością. Cykliści od zawsze byli na widelcu.