A057168 Next larger integer with same binary weight (number of 1 bits) as n.
2, 4, 5, 8, 6, 9, 11, 16, 10, 12, 13, 17, 14, 19, 23, 32, 18, 20, 21, 24, 22, 25, 27, 33, 26, 28, 29, 35, 30, 39, 47, 64, 34, 36, 37, 40, 38, 41, 43, 48, 42, 44, 45, 49, 46, 51, 55, 65, 50, 52, 53, 56, 54, 57, 59, 67, 58, 60, 61, 71, 62, 79, 95, 128, 66, 68, 69, 72, 70, 73, 75
Offset: 1
Examples
a(6)=9 since 6 has two one-bits (i.e., 6=2+4) and 9 is the next higher integer of binary weight two (7 is weight three and 8 is weight one).
References
- Donald Knuth, The Art of Computer Programming, Vol. 4A, section 7.1.3, exercises 20-21.
Links
- Reinhard Zumkeller, Table of n, a(n) for n = 1..10000
- M. Beeler, R. W. Gosper, and R. Schroeppel, HAKMEM, MIT Artificial Intelligence Laboratory, Memo AIM-239, February 1972, Item 175 by Gosper, page 81. Also HTML transcription.
- Donald E. Knuth, The Art of Computer Programming, Pre-Fascicle 1A, Draft of Section 7.1.3, 2008. Exercises 20 and 21 page 54 and answers pages 75-76.
- Marc B. Reynolds, Popcount walks: next, previous, toward and nearest (2023)
Crossrefs
Programs
-
Haskell
a057168 n = a057168_list !! (n-1) a057168_list = f 2 $ tail a000120_list where f x (z:zs) = (x + length (takeWhile (/= z) zs)) : f (x + 1) zs -- Reinhard Zumkeller, Aug 26 2012
-
Mathematica
a[n_] := (bw = DigitCount[n, 2, 1]; k = n+1; While[ DigitCount[k, 2, 1] != bw, k++]; k); Table[a[n], {n, 1, 71}](* Jean-François Alcover, Nov 28 2011 *)
-
PARI
a(n)=my(u=bitand(n,-n),v=u+n);(bitxor(v,n)/u)>>2+v \\ Charles R Greathouse IV, Oct 28 2009
-
PARI
A057168(n)=n+bitxor(n,n+n=bitand(n,-n))\n\4+n \\ M. F. Hasler, Aug 27 2014
-
Python
def a(n): u = n&-n; v = u+n; return (((v^n)//u)>>2)+v print([a(n) for n in range(1, 72)]) # Michael S. Branicky, Jul 10 2022 after Charles R Greathouse IV
-
Python
def A057168(n): return ((n&~(b:=n+(a:=n&-n)))>>a.bit_length())^b # Chai Wah Wu, Mar 06 2025
Formula
From Reinhard Zumkeller, Aug 18 2008: (Start)
For k,m>0, a((2^k-1)*2^m) = 2^(k+m)+2^(k-1)-1. - Chai Wah Wu, Mar 07 2025
If n is odd, then a(n) = XOR(n,OR(a,a/2)) where a = AND(-n,n+1). - Chai Wah Wu, Mar 08 2025
Comments