# Program to find the Nth natural number with exactly two bits set

Given an integer **N**, the task is to find the **Nth** natural number with exactly two bits set.

**Examples:**

Input:N = 4

Output:9

Explanation:

Numbers with exactly two bits set: 3, 5, 6, 9, 10, 12, …

4th number in this is 9

Input:N = 15

Output:48

**Naive Approach:**

- Run a loop through all natural numbers, and for each number, check if it has two bits set or not by counting set bits in a number.
- Print the Nth number having two set bits.

**Efficient Approach: **

- Find the leftmost set bit by finding the partition to which N belongs (Partition ‘i’ has ‘i’ numbers in it).
- To find the other set bit, we’ll have to first find the distance of N from the last number of the previous partition. Based on their difference, we set the corresponding bit.
**Note:**To set ith bit (i = 0, 1, 2…) in a number**K**:k = k | (1<<(i))

**Below is the implementation of the above approach:**## C++

`// C++ Code to find the Nth number`

`// with exactly two bits set`

`#include <bits/stdc++.h>`

`using`

`namespace`

`std;`

`// Function to find the Nth number`

`// with exactly two bits set`

`void`

`findNthNum(`

`long`

`long`

`int`

`N)`

`{`

`long`

`long`

`int`

`bit_L = 1, last_num = 0;`

`// Keep incrementing until`

`// we reach the partition of 'N'`

`// stored in bit_L`

`while`

`(bit_L * (bit_L + 1) / 2 < N) {`

`last_num = last_num + bit_L;`

`bit_L++;`

`}`

`// set the rightmost bit`

`// based on bit_R`

`int`

`bit_R = N - last_num - 1;`

`cout << (1 << bit_L) + (1 << bit_R)`

`<< endl;`

`}`

`// Driver code`

`int`

`main()`

`{`

`long`

`long`

`int`

`N = 13;`

`findNthNum(N);`

`return`

`0;`

`}`

*chevron_right**filter_none*## Java

`// Java Code to find the Nth number`

`// with exactly two bits set`

`class`

`GFG{`

`// Function to find the Nth number`

`// with exactly two bits set`

`static`

`void`

`findNthNum(`

`int`

`N)`

`{`

`int`

`bit_L =`

`1`

`, last_num =`

`0`

`;`

`// Keep incrementing until`

`// we reach the partition of 'N'`

`// stored in bit_L`

`while`

`(bit_L * (bit_L +`

`1`

`) /`

`2`

`< N) {`

`last_num = last_num + bit_L;`

`bit_L++;`

`}`

`// set the rightmost bit`

`// based on bit_R`

`int`

`bit_R = N - last_num -`

`1`

`;`

`System.out.print((`

`1`

`<< bit_L) + (`

`1`

`<< bit_R)`

`+`

`"\n"`

`);`

`}`

`// Driver code`

`public`

`static`

`void`

`main(String[] args)`

`{`

`int`

`N =`

`13`

`;`

`findNthNum(N);`

`}`

`}`

`// This code is contributed by Princi Singh`

*chevron_right**filter_none*## Python3

`# Python Code to find the Nth number`

`# with exactly two bits set`

`# Function to find the Nth number`

`# with exactly two bits set`

`def`

`findNthNum(N):`

`bit_L`

`=`

`1`

`;`

`last_num`

`=`

`0`

`;`

`# Keep incrementing until`

`# we reach the partition of 'N'`

`# stored in bit_L`

`while`

`(bit_L`

`*`

`(bit_L`

`+`

`1`

`)`

`/`

`2`

`< N):`

`last_num`

`=`

`last_num`

`+`

`bit_L;`

`bit_L`

`+`

`=`

`1`

`;`

`# set the rightmost bit`

`# based on bit_R`

`bit_R`

`=`

`N`

`-`

`last_num`

`-`

`1`

`;`

`print`

`((`

`1`

`<< bit_L)`

`+`

`(`

`1`

`<< bit_R));`

`# Driver code`

`if`

`__name__`

`=`

`=`

`'__main__'`

`:`

`N`

`=`

`13`

`;`

`findNthNum(N);`

`# This code contributed by PrinciRaj1992`

*chevron_right**filter_none*## C#

`// C# Code to find the Nth number`

`// with exactly two bits set`

`using`

`System;`

`class`

`GFG{`

`// Function to find the Nth number`

`// with exactly two bits set`

`static`

`void`

`findNthNum(`

`int`

`N)`

`{`

`int`

`bit_L = 1, last_num = 0;`

`// Keep incrementing until`

`// we reach the partition of 'N'`

`// stored in bit_L`

`while`

`(bit_L * (bit_L + 1) / 2 < N) {`

`last_num = last_num + bit_L;`

`bit_L++;`

`}`

`// set the rightmost bit`

`// based on bit_R`

`int`

`bit_R = N - last_num - 1;`

`Console.Write((1 << bit_L) + (1 << bit_R)`

`+`

`"\n"`

`);`

`}`

`// Driver code`

`public`

`static`

`void`

`Main(String[] args)`

`{`

`int`

`N = 13;`

`findNthNum(N);`

`}`

`}`

`// This code is contributed by Princi Singh`

*chevron_right**filter_none***Output:**36

**Time Complexity :**O(Partition of Number)Don’t stop now and take your learning to the next level. Learn all the important concepts of Data Structures and Algorithms with the help of the most trusted course: DSA Self Paced. Become industry ready at a student-friendly price.

## Recommended Posts:

- Find the largest number smaller than integer N with maximum number of set bits
- Program to invert bits of a number Efficiently
- Program to count number of set bits in an (big) array
- Write an Efficient C Program to Reverse Bits of a Number
- Find a number containing N - 1 set bits at even positions from the right
- Find the largest number with n set and m unset bits
- Find the smallest number with n set and m unset bits
- Find a number X such that (X XOR A) is minimum and the count of set bits in X and B are equal
- Check if bits of a number has count of consecutive set bits in increasing order
- Toggle bits of a number except first and last bits
- C++ Program for cube sum of first n natural numbers
- C++ Program for Sum of squares of first n natural numbers
- Program to find the number of men initially
- Program to find absolute value of a given number
- C++ Program to find sum of even factors of a number
- C program to find Decagonal Number
- Python program to find second largest number in a list
- Python program to find number of likes and dislikes
- Python program to find largest number in a list
- Python program to find smallest number in a list

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.