cp's OEIS Frontend

This is a front-end for the Online Encyclopedia of Integer Sequences, made by Christian Perfect. The idea is to provide OEIS entries in non-ancient HTML, and then to think about how they're presented visually. The source code is on GitHub.

A165370 Smallest number whose sum of cubes of digits is n.

This page as a plain text file.
%I A165370 #35 Oct 12 2024 14:52:32
%S A165370 0,1,11,111,1111,11111,111111,1111111,2,12,112,1112,11112,111112,
%T A165370 1111112,11111112,22,122,1122,11122,111122,1111122,11111122,111111122,
%U A165370 222,1222,11222,3,13,113,1113,11113,2222,12222,112222,23,123,1123,11123
%N A165370 Smallest number whose sum of cubes of digits is n.
%C A165370 A055012(a(n)) = n and A055012(m) <> n for m < a(n).
%C A165370 For all terms the digits are in nondecreasing order.
%C A165370 From _Ondrej Kutal_, Oct 06 2024: (Start)
%C A165370 a(n) can be formulated as a solution to an integer linear programming problem: Let c_i be the number of occurrences of digit i in the number (1 <= i <= 9). We want to minimize c_1 + c_2 + ... + c_9 (total number of digits) subject to the constraints c_1 + 8*c_2 + 27*c_3 + ... + 729*c_9 = n and c_i >= 0 for all i. To get the smallest solution among all with this number of digits, we further maximize the number of 1s (c_1), then the number of 2s (c_2), and so on up to 9s (c_9). This approach ensures we find the lexicographically smallest number with the minimum number of digits whose sum of cubes equals n.
%C A165370 a(n) can be computed by selecting a digit d (1 <= d <= 9) that minimizes the result of concatenating d with a(n-d^3), where n-d^3 >= 0. This can be done efficiently using dynamic programming.
%C A165370 As it turns out, the sequence is periodic (up to the trailing 9s) for n >= 4609, with a period of 729. Therefore, only a finite amount of values need to be computed; the rest can be derived by appending the appropriate number of 9s.
%C A165370 (End)
%H A165370 Jon E. Schoenfield, <a href="/A165370/b165370.txt">Table of n, a(n) for n = 0..10000</a> (first 1001 terms from Reinhard Zumkeller)
%o A165370 (PARI) a(n) = my(k=1); while(vecsum(apply(x->(x^3), digits(k))) != n, k++); k; \\ _Michel Marcus_, Sep 08 2019
%o A165370 (Python)
%o A165370 # using dynamic programming
%o A165370 def A165370(n):
%o A165370     # caching numbers,their tenth power (for fast concatenation) and cube sum
%o A165370     cache = [(None, None, None)] * (n + 1)
%o A165370     cache[0] = (0, 1, 0)
%o A165370     cubes = [i**3 for i in range(10)]
%o A165370     for i in range(1, min(n + 1, 5832)):
%o A165370         for d in range(1, 10):
%o A165370             if i - cubes[d] >= 0:
%o A165370                 sub_result, tenthpower, cubesum = cache[i - cubes[d]]
%o A165370                 if sub_result is not None:
%o A165370                     current = d * tenthpower + sub_result
%o A165370                     if cache[i][0] is None or current < cache[i][0]:
%o A165370                         cache[i] = (current, 10 * tenthpower, cubesum + cubes[d])
%o A165370     if n < 5832:
%o A165370         return cache[n][0]
%o A165370     sub_result, _, cubesum = cache[5103 + n % 729]
%o A165370     nines = (n - cubesum) // 729
%o A165370     return (sub_result + 1) * (10 ** nines) - 1 # _Ondrej Kutal_, Oct 06 2024
%Y A165370 Cf. A009994, A052382, A055012, A055016.
%K A165370 nonn,look,base
%O A165370 0,3
%A A165370 _Reinhard Zumkeller_, Sep 17 2009