Related Articles
Count numbers up to N whose rightmost set bit is K
• Last Updated : 04 Jan, 2021

Given two positive integers N and K, the task is to count the numbers from the range [1, N] whose Kth bit from the right, i.e. LSB, is the rightmost set bit.

Examples:

Input: N = 15, K = 2
Output: 4
Explanation:
(2)10 = (010)2, (6)10 = (110)2, (10)10 = (1010)2, (14)10 = (1110)2 have the 2nd bit from the right is set.

Input: N = 10 K = 3
Output: 3

Naive Approach: The idea is to iterate over the range [1, N] and for every number in the range, check if the position of the rightmost set bit is K and print the count of such numbers.
Time Complexity: O(N LogN)
Auxiliary Space: O(1)

Efficient Approach: The idea is to find the numbers with the position of the rightmost set bit at position i at every step. Follow the steps below to solve the problem:

• Iterate over the range [1, K] using a variable, say i.
• Find a number whose rightmost set bit is ith.
• Subtract that number from N.
• Repeat the above step for all values of i.

Below is the implementation of the above approach:

## C++

 `// C++ program for the above approach` `#include ``using` `namespace` `std;` `// Function to count the numbers in the``// range [1, N] whose rightmost set bit is K``int` `countNumberHavingKthBitSet(``int` `N, ``int` `K)``{``    ``// Stores the number whose``    ``// rightmost set bit is K``    ``int` `numbers_rightmost_setbit_K;` `    ``for` `(``int` `i = 1; i <= K; i++) {` `        ``// Numbers whose rightmost set bit is i``        ``int` `numbers_rightmost_bit_i = (N + 1) / 2;` `        ``// Subtracting the number whose``        ``// rightmost set bit is i, from N``        ``N -= numbers_rightmost_bit_i;` `        ``// Since i = k, then the number whose``        ``// rigthmost set bit is K is stored``        ``if` `(i == K) {``            ``numbers_rightmost_setbit_K``                ``= numbers_rightmost_bit_i;``        ``}``    ``}` `    ``cout << numbers_rightmost_setbit_K;``}` `// Driver Code``int` `main()``{``    ``int` `N = 15;``    ``int` `K = 2;``    ``countNumberHavingKthBitSet(N, K);` `    ``return` `0;``}`

## Java

 `// Java program for the above approach``import` `java.util.Arrays;``class` `GFG``{``     ` `// Function to count the numbers in the``// range [1, N] whose rightmost set bit is K``static` `void` `countNumberHavingKthBitSet(``int` `N, ``int` `K)``{``    ``// Stores the number whose``    ``// rightmost set bit is K``    ``int` `numbers_rightmost_setbit_K = ``0``;``    ``for` `(``int` `i = ``1``; i <= K; i++)``    ``{`` ` `        ``// Numbers whose rightmost set bit is i``        ``int` `numbers_rightmost_bit_i = (N + ``1``) / ``2``;`` ` `        ``// Subtracting the number whose``        ``// rightmost set bit is i, from N``        ``N -= numbers_rightmost_bit_i;`` ` `        ``// Since i = k, then the number whose``        ``// rigthmost set bit is K is stored``        ``if` `(i == K)``        ``{``            ``numbers_rightmost_setbit_K``                ``= numbers_rightmost_bit_i;``        ``}``    ``}``    ``System.out.println(numbers_rightmost_setbit_K);``}`` ` `// Driver Code``static` `public` `void` `main(String args[])``{``    ``int` `N = ``15``;``    ``int` `K = ``2``;``    ``countNumberHavingKthBitSet(N, K);``}``}` `// This code is contributed by sanjoy_62`

## Python3

 `# Python3 program for the above approach` `# Function to count the numbers in the``# range [1, N] whose rightmost set bit is K``def` `countNumberHavingKthBitSet(N, K):``    ` `    ``# Stores the number whose``    ``# rightmost set bit is K``    ``numbers_rightmost_setbit_K ``=` `0` `    ``for` `i ``in` `range``(``1``, K ``+` `1``):` `        ``# Numbers whose rightmost set bit is i``        ``numbers_rightmost_bit_i ``=` `(N ``+` `1``) ``/``/` `2` `        ``# Subtracting the number whose``        ``# rightmost set bit is i, from N``        ``N ``-``=` `numbers_rightmost_bit_i` `        ``# Since i = k, then the number whose``        ``# rigthmost set bit is K is stored``        ``if` `(i ``=``=` `K):``            ``numbers_rightmost_setbit_K ``=` `numbers_rightmost_bit_i` `    ``print` `(numbers_rightmost_setbit_K)` `# Driver Code``if` `__name__ ``=``=` `'__main__'``:``    ``N ``=` `15``    ``K ``=` `2``    ``countNumberHavingKthBitSet(N, K)` `# This code is contributed by mohit kumar 29`

## C#

 `// C# program for the above approach``using` `System;` `class` `GFG``{` `  ``// Function to count the numbers in the``  ``// range [1, N] whose rightmost set bit is K``  ``static` `void` `countNumberHavingKthBitSet(``int` `N, ``int` `K)``  ``{``    ``// Stores the number whose``    ``// rightmost set bit is K``    ``int` `numbers_rightmost_setbit_K = 0;``    ``for` `(``int` `i = 1; i <= K; i++)``    ``{` `      ``// Numbers whose rightmost set bit is i``      ``int` `numbers_rightmost_bit_i = (N + 1) / 2;` `      ``// Subtracting the number whose``      ``// rightmost set bit is i, from N``      ``N -= numbers_rightmost_bit_i;` `      ``// Since i = k, then the number whose``      ``// rigthmost set bit is K is stored``      ``if` `(i == K)``      ``{``        ``numbers_rightmost_setbit_K``          ``= numbers_rightmost_bit_i;``      ``}``    ``}``    ``Console.WriteLine(numbers_rightmost_setbit_K);``  ``}` `  ``// Driver Code``  ``static` `public` `void` `Main(String []args)``  ``{``    ``int` `N = 15;``    ``int` `K = 2;``    ``countNumberHavingKthBitSet(N, K);``  ``}``}`  `// This code is contributed by 29AjayKumar`

Output:
`4`

Time Complexity: O(K)
Auxiliary Space: O(1)

Attention reader! Don’t stop learning now. Get hold of all the important mathematical concepts for competitive programming with the Essential Maths for CP Course at a student-friendly price. To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

My Personal Notes arrow_drop_up