[go: up one dir, main page]

login

Year-end appeal: Please make a donation to the OEIS Foundation to support ongoing development and maintenance of the OEIS. We are now in our 61st year, we have over 378,000 sequences, and we’ve reached 11,000 citations (which often say “discovered thanks to the OEIS”).

a(n) is the largest number smaller than n and having the same Hamming weight as n, or n if no such number exist.
2

%I #20 Mar 02 2021 06:02:56

%S 0,1,1,3,2,3,5,7,4,6,9,7,10,11,13,15,8,12,17,14,18,19,21,15,20,22,25,

%T 23,26,27,29,31,16,24,33,28,34,35,37,30,36,38,41,39,42,43,45,31,40,44,

%U 49,46,50,51,53,47,52,54,57,55,58,59,61,63,32,48,65,56,66,67,69

%N a(n) is the largest number smaller than n and having the same Hamming weight as n, or n if no such number exist.

%C To calculate a(n), some bits of n are rearranged. The lowest 1-bit which can move down is the 1 of the lowest 10 bit pair in n. This pair becomes 01 in a(n) and any 1's below there move up to immediately below so the decrease is as small as possible. If n has no 10 bit pair (n = 2^k-1) then nothing smaller is possible and a(n) = n. - _Kevin Ryde_, Mar 01 2021

%H Philippe Beaudoin, <a href="/A243109/b243109.txt">Table of n, a(n) for n = 0..10000</a>

%H Joerg Arndt, <a href="http://www.jjj.de/fxt/#fxtbook">Matters Computational (The Fxtbook)</a>, section 1.24.1 Co-lexicographic (colex) order, function prev_colex_comb(), and second implementation in FXT library bitcombcolex.h (both 0 when no previous rather than a(n) = n).

%F a(n) = t - 2^(A007814(t) - A007814(n+1) - 1) if t!=0, or a(n) = n if t=0, where t = A129760(n+1) is n with any trailing 1's cleared to 0's and A007814 is the 2-adic valuation. - _Kevin Ryde_, Mar 01 2021

%e From _Kevin Ryde_, Mar 01 2021: (Start)

%e v vv

%e n = 1475 = binary 10111000011 lowest 10 of n

%e a(n) = 1464 = binary 10110111000 becomes 01 and

%e ^^^ other 1's below

%e (End)

%o (PARI) a(n) = {my(hn = hammingweight(n)); forstep(k=n-1, 1, -1, if (hammingweight(k) == hn, return (k)); ); return (n); } \\ _Michel Marcus_, Aug 20 2014

%o (PARI) a(n) = my(s=n+1,t=bitand(n,s)); if(t==0,n, t - 1<<(valuation(t,2)-valuation(s,2)-1)); \\ _Kevin Ryde_, Mar 01 2021

%Y Cf. A057168 (next of same weight), A066884 (array by weight), A241816 (lowest 10->01).

%K nonn,base,easy

%O 0,4

%A _Philippe Beaudoin_, Aug 20 2014