OFFSET
1,2
COMMENTS
This sequence uses a greedy algorithm f(x) to find the largest number k <= n such that k is in A003586. The function is recursively applied to the result until it reaches 1. This is the algorithm described in the reference p. 36. This sequence presents the terms in order from least to greatest term.
The reference suggests the greedy algorithm is one way to render n in a "dual-base number system", essentially base (2,3) with bases 2 and 3 arranged orthogonally to produce a matrix of places with values that are the tensor product of prime power ranges of 2 and 3. Place values are signified by 0 or 1. Thus we can boil down the matrix to simply list the values of places harboring digit 1.
Row n = n for n that are in A003586.
The reference defines a "canonic" representation of n on page 33 as having the lowest number of terms. The greedy algorithm does not always render the canonic representation. a(41) = {1,4,36}, but {9,32} is the shortest possible partition of 41 such that all terms are in A003586.
The terms in row n differ from the canonic terms at n = 41, 43, 59, 86, 88, 91, 113, 118, 123, 135, 155, 172, 176, 177, 182, 185, 209, 215, 226, 236, 239, 248... (i.e., A277071).
REFERENCES
V. Dimitrov, G. Jullien, and R. Muscedere, Multiple Number Base System Theory and Applications, 2nd ed., CRC Press, 2012, pp. 35-39.
LINKS
Michael De Vlieger, Table of n, a(n) for n = 1..11006 (Rows 1 <= n <= 3600)
EXAMPLE
Triangle begins:
1
2
3
4
1,4
6
1,6
8
9
1,9
2,9
12
1,12
2,12
3,12
16
1,16
18
1,18
2,18
3,18
4,18
1,4,18
...
MATHEMATICA
Table[Reverse@ DeleteCases[Append[Abs@ Differences@ #, Last@ #], k_ /; k == 0] &@ NestWhileList[# - SelectFirst[# - Range[0, # - 1], Block[{m = #, n = 6}, While[And[m != 1, ! CoprimeQ[m, n]], n = GCD[m, n]; m = m/n]; m == 1] &] &, n, # > 1 &], {n, 49}]
PROG
(Python)
from itertools import count, takewhile
N = 50
def B(p): return list(takewhile(lambda x: x<=N, (p**i for i in count(0))))
B23set = set(b*t for b in B(2) for t in B(3) if b*t <= N)
B23lst = sorted(B23set, reverse=True)
def row(n):
if n in B23set: return [n]
big = next(t for t in B23lst if t <= n)
return row(n - big) + [big]
print([t for r in range(1, N) for t in row(r)]) # Michael S. Branicky, Sep 14 2022
CROSSREFS
KEYWORD
nonn,tabf,easy
AUTHOR
Michael De Vlieger, Sep 25 2016
STATUS
approved