

A254109


If n <= 63, a(n) = n; for n > 63: a(32n + 14) = 8*n + 5, a(64n + 30) = 4*n + 3, and for other cases with n > 63: a(2n) = 2*a(n), a(2n+1) = 2*a(n) + 1.


3



0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 21, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 7
(list;
graph;
refs;
listen;
history;
text;
internal format)



OFFSET

0,3


COMMENTS

This sequence is a rewritingrecurrence which attempts to contract the perimeter of binary boundary coded holeless polyhexes and other fusenes by 2 or 4 edges, where first possible (from the least significant end of n), and if no such contraction is possible, then it fixes n. Together with recurrence A258009 can be used to obtain the terms of A258012, please see comments there.


LINKS

Antti Karttunen, Table of n, a(n) for n = 0..8191


FORMULA

If n <= 63, a(n) = n; for n > 63: a(32n + 14) = 8*n + 5, a(64n + 30) = 4*n + 3, and for other cases with n > 63: a(2n) = 2*a(n), a(2n+1) = 2*a(n) + 1.


EXAMPLE

The first term where a(n) is different from n occurs at n=78, as 78 = "1001110" in binary, where the clause a(32n + 14) = 8*n + 5 will rewrite the trailing "01110" part as "101", resulting binary string "10101" = 21 in decimal.


PROG

(Scheme, two variants, the first one utilizing a memoizing definecmacro)
(definec (A254109 n) (cond ((<= n 63) n) ((= 14 (modulo n 32)) (+ 5 (* 8 (floor>exact (/ n 32))))) ((= 30 (modulo n 64)) (+ 3 (* 4 (floor>exact (/ n 64))))) (else (+ (modulo n 2) (* 2 (A254109 (floor>exact (/ n 2))))))))
;; Faster, iterative version:
(define (A254109 n) (let loop ((n n) (s 0) (p2 1)) (cond ((<= n 63) (+ (* p2 n) s)) ((= 14 (modulo n 32)) (+ (* p2 8 (floor>exact (/ n 32))) s (* p2 5))) ((= 30 (modulo n 64)) (+ (* p2 4 (floor>exact (/ n 64))) s (* p2 3))) ((even? n) (loop (/ n 2) s (+ p2 p2))) (else (loop (/ ( n 1) 2) (+ s p2) (+ p2 p2))))))


CROSSREFS

Cf. A255561, A255568, A258009, A258012.
Sequence in context: A000027 A001477 A087156 * A317945 A292579 A262530
Adjacent sequences: A254106 A254107 A254108 * A254110 A254111 A254112


KEYWORD

nonn,base


AUTHOR

Antti Karttunen, Mar 11 2015


EXTENSIONS

Recurrence corrected to match the intended usage by Antti Karttunen, Jun 05 2015


STATUS

approved



