login
A377012
Numbers k whose digits can be split into substrings so that the sum of these substrings raised to consecutive powers (1, 2, 3,...) is the number k itself.
0
89, 135, 175, 518, 598, 1306, 1370, 1371, 1676, 2045, 2427, 3055, 5755, 5918, 9899, 11053, 24429, 88297, 135010, 234322, 255050, 255051, 360030, 360031, 494703, 512780, 517380, 568217, 767368, 779243, 785920, 785921, 788834, 819116, 986562, 998999, 1000100
OFFSET
1,1
COMMENTS
At least two substrings are required and each substring must have at least one digit.
A subsequence is A032799 (except for 1-digit numbers). Unlike A032799, which is finite, this sequence is infinite because, e.g., the pattern 89, 9899, 998999,... can always be split into two equal-length substrings that generate a term as (10^i - 2)^1 + (10^i - 1)^2 = 10^i*(10^i - 2) + (10^i - 1) for all i > 0.
EXAMPLE
175 = 1^1 + 7^2 + 5^3 is a term.
5755 = 5^1 + 75^2 + 5^3 is a term.
88297 = 88^1 + 297^2 is a term.
234322 = 23^1 + 4^2 + 3^3 + 22^4 is a term.
PROG
(Python)
import itertools
analys = range(1, 7) # increase this if you want
for limite in analys:
numbers = range(pow(10, limite-1), pow(10, limite))
r = range(1, limite+1)
disp_temp = []
for s in r:
disp = list(itertools.product(r, repeat=s+1))
disp_temp.extend(disp)
disp_ok = [d for d in disp_temp if sum(d)==limite]
for numero in numbers:
str_numero = str(numero)
for combo in disp_ok:
k = limite
totale = 0
for c in range(len(combo), 0, -1):
partenza = k-combo[c-1]
porzione = str_numero[partenza:k]
if c == 1:
totale = totale + int(porzione)
else:
totale = totale + pow(int(porzione), c)
k = k - combo[c-1]
if totale == numero:
print(numero)
CROSSREFS
KEYWORD
nonn,base,new
AUTHOR
Francesco Di Matteo, Oct 28 2024
STATUS
approved