Given a number n, count number of integers smaller than or equal to n that have odd number of set bits.
Input : 5 Output : 3 Explanation : Integers with odd number of set bits in range 1 to 5 : 0 contains 0 set bits 1 contains 1 set bits 2 contains 1 set bits 3 contains 2 set bits 4 contains 1 set bits 5 contains 2 set bits Input : 10 Output : 5 Explanation : Integers with odd set bits are 1, 2, 4, 7 and 8.
Prerequisites : Count number of set bits
The idea is based on below fact.
If n is odd then there are total n+1 integers smaller than or equal to n (0, 1, 2 … n) and half of these integers contain odd number of set bits.
How to handle case when n is even? We know result for n-1. We count set bits in n and add 1 to n/2 if the count is odd. Else we return n/2.