login
a(n)=n for n <= 2; for n >= 3, a(n) = largest number that can be obtained by swapping two bits in the binary expansion of n.
6

%I #29 Sep 09 2014 03:37:27

%S 0,1,2,3,4,6,6,7,8,12,12,14,12,14,14,15,16,24,24,26,24,28,28,30,24,28,

%T 28,30,28,30,30,31,32,48,48,50,48,52,52,54,48,56,56,58,56,60,60,62,48,

%U 56,56,58,56,60,60,62,56,60,60,62,60,62,62,63,64,96,96

%N a(n)=n for n <= 2; for n >= 3, a(n) = largest number that can be obtained by swapping two bits in the binary expansion of n.

%C In both this sequence and A246594 you are not allowed to touch any of the invisible 0's before the leading 1.

%C Swap first 0 with last 1 in the binary expansion of n or return n if no such swap is possible. - _Chai Wah Wu_, Sep 08 2014

%H Alois P. Heinz, <a href="/A246593/b246593.txt">Table of n, a(n) for n = 0..8192</a>

%e If n = 17 = 10001_2 then a(17) = 11000_2 = 24.

%o (Python)

%o from itertools import combinations

%o def A246593(n):

%o ....if n <= 1:

%o ........return n

%o ....else:

%o ........s, y = bin(n)[2:], n

%o ........for i in combinations(range(len(s)),2):

%o ............s2 = int(s[:i[0]]+s[i[1]]+s[i[0]+1:i[1]]+s[i[0]]+s[i[1]+1:],2)

%o ............if s2 > y:

%o ................y = s2

%o ........return y

%o # _Chai Wah Wu_, Sep 05 2014

%o (Python)

%o # implement algorithm in comment

%o def A246593(n):

%o ....s = bin(n)[2:]

%o ....s2 = s.rstrip('0')

%o ....s3 = s2.lstrip('1')

%o ....return(int(s2[:-len(s3)]+'1'+s3[1:-1]+'0'+s[len(s2):],2) if (len(s3) > 0 and n > 1) else n)

%o # _Chai Wah Wu_, Sep 08 2014

%Y Cf. A241816, A246591, A246592, A246594.

%K nonn,base

%O 0,3

%A _N. J. A. Sloane_, Sep 03 2014

%E Corrected definition and more terms from _Alois P. Heinz_, Sep 04 2014