login
Inverse function for injection A005187.
24

%I #16 Jun 11 2017 06:43:51

%S 0,1,0,2,3,0,0,4,5,0,6,7,0,0,0,8,9,0,10,11,0,0,12,13,0,14,15,0,0,0,0,

%T 16,17,0,18,19,0,0,20,21,0,22,23,0,0,0,24,25,0,26,27,0,0,28,29,0,30,

%U 31,0,0,0,0,0,32,33,0,34,35,0,0,36,37,0,38,39,0,0,0,40,41,0,42,43,0,0,44,45,0,46,47,0

%N Inverse function for injection A005187.

%C a(0)=0; thereafter if n occurs as a term of A005187, a(n)=its position in A005187, otherwise zero. This works as an "inverse" function for A005187 in a sense that a(A005187(n)) = n for all n.

%C a(n)*A234017(n) = 0 for all n.

%H Antti Karttunen, <a href="/A213714/b213714.txt">Table of n, a(n) for n = 0..8192</a>

%F a(0)=0, for n>0, a(n) = A079559(n) * (A046699(n+2)-1) [With A046699's October 2012 starting offset. Incorrect indexing shown in this formula corrected by _Antti Karttunen_, Dec 18 2013]

%o (MIT/GNU Scheme)

%o (define (A213714 n) (if (< n 1) 0 (* (A079559 n) (- (A046699 (+ n 2)) 1)))) ;; With A046699's October 2012 starting offset.

%o (Haskell)

%o import Data.List (genericIndex)

%o a213714 n = genericIndex a213714_list n

%o a213714_list = f [0..] a005187_list 0 where

%o f (x:xs) ys'@(y:ys) i | x == y = i : f xs ys (i+1)

%o | otherwise = 0 : f xs ys' i

%o -- _Reinhard Zumkeller_, May 01 2015

%o (Python)

%o from sympy import factorial

%o def a046699(n):

%o if n<3: return 1

%o s=1

%o while factorial(2*s)%(2**(n - 1))>0: s+=1

%o return s

%o def a053644(n): return 0 if n==0 else 2**(len(bin(n)[2:]) - 1)

%o def a043545(n):

%o x=bin(n)[2:]

%o return int(max(x)) - int(min(x))

%o def a079559(n): return 1 if n==0 else a043545(n + 1)*a079559(n + 1 - a053644(n + 1))

%o def a(n): return 0 if n==0 else a079559(n)*(a046699(n + 2) - 1) # _Indranil Ghosh_, Jun 11 2017

%Y Can be used when computing A213715, A213723, A213724, A233275, A233277. Cf. A005187, A046699, A079559, A234017, A230414.

%K nonn

%O 0,4

%A _Antti Karttunen_, Oct 26 2012