[go: up one dir, main page]

login
A245812
Self-inverse permutation of natural numbers: a(0) = 0, a(1) = 1, and for n > 1, if A065620(n) < 0, a(n) = A065621(1+a(-(A065620(n)))), otherwise a(n) = A048724(a(A065620(n)-1)).
3
0, 1, 3, 2, 6, 7, 4, 5, 15, 14, 13, 12, 11, 10, 9, 8, 24, 25, 26, 27, 28, 29, 30, 31, 16, 17, 18, 19, 20, 21, 22, 23, 57, 56, 59, 58, 61, 60, 63, 62, 49, 48, 51, 50, 53, 52, 55, 54, 41, 40, 43, 42, 45, 44, 47, 46, 33, 32, 35, 34, 37, 36, 39, 38, 106, 107, 104, 105, 110, 111, 108, 109, 98, 99, 96, 97, 102, 103, 100
OFFSET
0,3
COMMENTS
This is an instance of entanglement permutation, where complementary pair A048724/A065621 is entangled with the same pair in the opposite order: A065621/A048724, with a(1) set to 1.
Note how this is A193231-conjugate of A054429.
FORMULA
a(0) = 0, a(1) = 1, and for n > 1, if A065620(n) < 0, a(n) = A065621(1+a(-(A065620(n)))), otherwise a(n) = A048724(a(A065620(n)-1)).
Equally:
a(0) = 0, a(1) = 1, and for n > 1, if A010060(n) = 0, a(n) = A065621(1+a(A246159(n))), otherwise a(n) = A048724(a(A246160(n)-1)). [Note how A246159 is an inverse function for A048724, while A246160 is an inverse function for A065621].
As a composition of related permutations:
a(n) = A193231(A234025(n)).
a(n) = A234026(A193231(n)).
a(n) = A193231(A054429(A193231(n))).
PROG
(Scheme, with memoizing-macro definec, two equivalent definitions)
(definec (A245812 n) (cond ((<= n 1) n) ((negative? (A065620 n)) (A065621 (+ 1 (A245812 (- (A065620 n)))))) (else (A048724 (A245812 (- (A065620 n) 1))))))
(definec (A245812 n) (cond ((<= n 1) n) ((zero? (A010060 n)) (A065621 (+ 1 (A245812 (A246159 n))))) (else (A048724 (A245812 (- (A246160 n) 1))))))
(PARI)
a048724(n) = bitxor(n, 2*n);
a065620(n) = if(n<3, n, if(n%2, -2*a065620((n - 1)/2) + 1, 2*a065620(n/2)));
a065621(n) = bitxor(n, 2*(n - bitand(n, -n)));
a(n) = x=a065620(n); if(n<2, n, if(x<0, a065621(1 + a(-x)), a048724(a(x - 1))));
for(n=0, 100, print1(a(n), ", ")) \\ Indranil Ghosh, Jun 07 2017
(Python)
def a048724(n): return n^(2*n)
def a065620(n): return n if n<3 else 2*a065620(n//2) if n%2==0 else -2*a065620((n - 1)//2) + 1
def a065621(n): return n^(2*(n - (n & -n)))
def a(n):
x=a065620(n)
return n if n<2 else a065621(1 + a(-x)) if x<0 else a048724(a(x - 1))
print([a(n) for n in range(101)]) # Indranil Ghosh, Jun 07 2017
CROSSREFS
Similar or related permutations: A193231, A234025, A234026, A246211, A236854, A235491, A054429, A234027.
Sequence in context: A165199 A371962 A268825 * A268826 A182849 A120231
KEYWORD
nonn
AUTHOR
Antti Karttunen, Aug 20 2014
STATUS
approved