OFFSET
1,2
COMMENTS
Taking first differences, then applying the RUNS transform gives [1, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 1, 1, 1, 5, 1, 1, 1, 13, 1, 1, 1, 13, 1, 1, 1, 29, 1, 1, 1, 29, 1, 1, 1, 61, 1, 1, 1, 61, 1, 1, 1, 125, 1, 1, 1, 125, 1, 1, 1, 253, 1, 1, 1, 253, 1, 1, 1, 509, ...].
If the initial 4 is changed to a 1, this has an obvious regular structure, which could then be analyzed to give a conjectured generating function, just as was done for A354767. See link below.
A more precise conjecture is given in the Formula section.
LINKS
Rémy Sigrist, Table of n, a(n) for n = 1..10000
Michael De Vlieger, Thomas Scheuerle, Rémy Sigrist, N. J. A. Sloane, and Walter Trump, The Binary Two-Up Sequence, arXiv:2209.04108 [math.CO], Sep 11 2022.
Rémy Sigrist, C++ program
N. J. A. Sloane, A conjectured generating function for A354169.
FORMULA
Conjecture from N. J. A. Sloane, Jun 29 2022: (Start)
The following is a conjectured explicit formula for a(n). Basically a(n) = n+2, except that there are four types of n which have a different formula, and there are 6 exceptional values for small n.
Here is the formula, which agrees with the first 10000 terms.
(I) If n = 3*2^(k-1)-3, k >= 2 then a(n) = (n+1)/2, except a(3) = a(9) = 4 and a(21) = 5.
(II) If n = 2^(k+1)-3, k >= 1 then a(n) = (n+1)/2, except a(5) = a(13) = 6 and a(29) = 7.
(III) If n = 3*2^(k-1)-2, k >= 2 then a(n) = n+1.
(IV) If n = 2^(k+1)-2, k >= 1 then a(n) = n+1.
(V) Otherwise a(n) = n+2. (End)
The conjecture is now known to be true. See De Vlieger et al. (2022). - N. J. A. Sloane, Aug 29 2022
PROG
(C++) See Links section.
(Python)
from itertools import count, islice
from collections import deque
from functools import reduce
from operator import or_
def A354774_gen(): # generator of terms
aset, aqueue, b, f = {0, 1, 2}, deque([2]), 2, False
while True:
for k in count(1):
m, j, j2, r, s = 0, 0, 1, b, k
while r > 0:
r, q = divmod(r, 2)
if not q:
s, y = divmod(s, 2)
m += y*j2
j += 1
j2 *= 2
if s > 0:
m += s*2**b.bit_length()
if m not in aset:
if (s := bin(m)[3:]).count('1') == 1:
yield len(s)
aset.add(m)
aqueue.append(m)
if f: aqueue.popleft()
b = reduce(or_, aqueue)
f = not f
break
CROSSREFS
KEYWORD
nonn
AUTHOR
N. J. A. Sloane, Jun 26 2022
STATUS
approved