|
|
A322463
|
|
Reverse runs of zeros in binary expansion of n and convert back to decimal.
|
|
2
|
|
|
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 20, 19, 18, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 40, 35, 36, 41, 44, 39, 34, 37, 42, 43, 38, 45, 46, 47, 48, 49, 52, 51, 50, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 80, 67
(list;
graph;
refs;
listen;
history;
text;
internal format)
|
|
|
OFFSET
|
0,3
|
|
COMMENTS
|
This sequence is a self-inverse permutation of nonnegative integers.
|
|
LINKS
|
|
|
FORMULA
|
a(2^n) = 2^n.
a(2^n-1) = 2^n-1.
|
|
EXAMPLE
|
For n = 150:
- the binary representation of 150 is "10010110",
- we have three runs of zeros: "00", "0" and "0",
- we exchange the first and the third run, and the second remains in place,
- we obtain: "10101100",
- hence a(150) = 172.
|
|
MATHEMATICA
|
a[n_] := Module[{s=Split[IntegerDigits[n, 2]]}, m=Length[s]; m2=m-Mod[m, 2]; If[m2>0, ind=Riffle[Range[1, m, 2], Range[m2, 1, -2]]; FromDigits[Flatten[s[[ind]]], 2], n]]; Array[a, 100, 0] (* Amiram Eldar, Dec 12 2018 *)
|
|
PROG
|
(PARI) a(n) = {
my (r=n, z=[], v=0, p=1, i=0);
while (r, my (l=valuation(r+(r%2), 2)); if (r%2==0, z=concat(l, z)); r\=2^l);
while (n, my (l=valuation(n+(n%2), 2)); if (n%2, v+=(2^l-1)*p; p*=2^l, p*=2^z[i++]); n\=2^l);
return (v);
}
|
|
CROSSREFS
|
See A322464 for the variant where we reverse the runs of ones.
See A056539 for a similar sequence.
|
|
KEYWORD
|
|
|
AUTHOR
|
|
|
STATUS
|
approved
|
|
|
|