# Sum of numbers with exactly 2 bits set

Given a number n. Find sum of all number upto n whose 2 bits are set.

Examples:

```Input : 10
Output : 33
3 + 5 + 6 + 9 + 10 = 33

Input : 100
Output : 762
```

## Recommended: Please try your approach on {IDE} first, before moving on to the solution.

Naive Approach: Find each number upto n whose 2 bits are set. If its 2 bits are set add it to the sum.

## C++

 `// CPP program to find sum of numbers ` `// upto n whose 2 bits are set ` `#include ` `using` `namespace` `std; ` ` `  `// To count number of set bits ` `int` `countSetBits(``int` `n) ` `{ ` `    ``int` `count = 0; ` `    ``while` `(n) { ` `        ``n &= (n - 1); ` `        ``count++; ` `    ``} ` `    ``return` `count; ` `} ` ` `  `// To calculate sum of numbers ` `int` `findSum(``int` `n) ` `{ ` `    ``int` `sum = 0; ` ` `  `    ``// To count sum of number ` `    ``// whose 2 bit are set ` `    ``for` `(``int` `i = 1; i <= n; i++) ` `        ``if` `(countSetBits(i) == 2) ` `            ``sum += i; ` ` `  `    ``return` `sum; ` `} ` ` `  `// Driver program to test above function ` `int` `main() ` `{ ` `    ``int` `n = 10; ` `    ``cout << findSum(n); ` `    ``return` `0; ` `} `

## Java

 `// Java program to find sum of numbers ` `// upto n whose 2 bits are set ` `public` `class` `Main { ` ` `  `    ``// To count number of set bits ` `    ``static` `int` `countSetBits(``int` `n) ` `    ``{ ` `        ``int` `count = ``0``; ` `        ``while` `(n > ``0``) { ` `            ``n &= (n - ``1``); ` `            ``count++; ` `        ``} ` `        ``return` `count; ` `    ``} ` ` `  `    ``// To calculate sum of numbers ` `    ``static` `int` `findSum(``int` `n) ` `    ``{ ` `        ``int` `sum = ``0``; ` ` `  `        ``// To count sum of number ` `        ``// whose 2 bit are set ` `        ``for` `(``int` `i = ``1``; i <= n; i++) ` `            ``if` `(countSetBits(i) == ``2``) ` `                ``sum += i; ` ` `  `        ``return` `sum; ` `    ``} ` ` `  `    ``// Driver program to test above function ` `    ``public` `static` `void` `main(String[] args) ` `    ``{ ` `        ``int` `n = ``10``; ` ` `  `        ``System.out.println(findSum(n)); ` `    ``} ` `} `

## Python3

 `# Python program to find ` `# sum of numbers ` `# upto n whose 2 bits are set ` ` `  `# To count number of set bits ` `def` `countSetBits(n): ` ` `  `    ``count ``=` `0` `    ``while` `(n):  ` `        ``n ``=``n & (n ``-` `1``) ` `        ``count``=``count ``+` `1` `     `  `    ``return` `count ` ` `  `# To calculate sum of numbers ` `def` `findSum(n): ` ` `  `    ``sum` `=` `0` `  `  `    ``# To count sum of number ` `    ``# whose 2 bit are set ` `    ``for` `i ``in` `range``(``1``,n``+``1``): ` `        ``if` `(countSetBits(i) ``=``=` `2``): ` `            ``sum` `=``sum` `+` `i ` `  `  `    ``return` `sum` ` `  `# Driver code ` `n ``=` `10` `print``(findSum(n)) ` ` `  `# This code is contributed ` `# by Anant Agarwal. `

## C#

 `// C# program to find sum of  ` `// numbers upto n whose 2  ` `// bits are set ` `using` `System; ` ` `  `class` `GFG ` `{ ` `     `  `    ``// To count number  ` `    ``// of set bits ` `    ``static` `int` `countSetBits(``int` `n) ` `    ``{ ` `        ``int` `count = 0; ` `        ``while` `(n > 0)  ` `        ``{ ` `            ``n = n & (n - 1); ` `            ``count++; ` `        ``} ` `        ``return` `count; ` `    ``} ` ` `  `    ``// To calculate ` `    ``// sum of numbers ` `    ``static` `int` `findSum(``int` `n) ` `    ``{ ` `        ``int` `sum = 0; ` ` `  `        ``// To count sum of number ` `        ``// whose 2 bit are set ` `        ``for` `(``int` `i = 1; i <= n; i++) ` `            ``if` `(countSetBits(i) == 2) ` `                ``sum += i; ` ` `  `        ``return` `sum; ` `    ``} ` ` `  `    ``// Driver Code ` `    ``static` `public` `void` `Main () ` `    ``{ ` `        ``int` `n = 10; ` ` `  `        ``Console.WriteLine(findSum(n)); ` `    ``} ` `} ` ` `  `// This code is contributed by aj_36 `

## PHP

 ` `

Output:

```33
```

Efficient Approach: The number whose 2 bits are set is of the form 2^x + 2^y and this number is less then n. So we have to find only numbers in the range upto n which is of form 2^i + 2^j where i > 0 and 2^i < n and 0 <= j < i.

## C++

 `// C++ program to find sum of numbers ` `// upto n whose 2 bits are set ` `#include ` `using` `namespace` `std; ` ` `  `// To calculate sum of numbers ` `int` `findSum(``int` `n) ` `{ ` `    ``int` `sum = 0; ` ` `  `    ``// Find numbers whose 2 bits are set ` `    ``for` `(``int` `i = 1; (1 << i) < n; i++) { ` `        ``for` `(``int` `j = 0; j < i; j++) { ` `            ``int` `num = (1 << i) + (1 << j); ` ` `  `            ``// If number is greater then n ` `            ``// we don't include this in sum ` `            ``if` `(num <= n) ` `                ``sum += num; ` `        ``} ` `    ``} ` ` `  `    ``// Return sum of numbers ` `    ``return` `sum; ` `} ` ` `  `// Driver program to test findSum() ` `int` `main() ` `{ ` `    ``int` `n = 10; ` `    ``cout << findSum(n); ` `    ``return` `0; ` `} `

## Java

 `// Java program to find sum of numbers ` `// upto n whose 2 bits are set ` `public` `class` `Main { ` ` `  `    ``// To calculate sum of numbers ` `    ``static` `int` `findSum(``int` `n) ` `    ``{ ` `        ``int` `sum = ``0``; ` ` `  `        ``// Find numbers whose 2 bits are set ` `        ``for` `(``int` `i = ``1``; ``1` `<< i < n; i++) { ` `            ``for` `(``int` `j = ``0``; j < i; j++) { ` `                ``int` `num = (``1` `<< i) + (``1` `<< j); ` ` `  `                ``// If number is greater then n ` `                ``// we don't include this in sum ` `                ``if` `(num <= n) ` `                    ``sum += num; ` `            ``} ` `        ``} ` ` `  `        ``// Return sum of numbers ` `        ``return` `sum; ` `    ``} ` ` `  `    ``// Driver program to test findSum() ` `    ``public` `static` `void` `main(String[] args) ` `    ``{ ` `        ``int` `n = ``10``; ` `        ``System.out.println(findSum(n)); ` `    ``} ` `} `

## Python3

 `# Python3 program to find sum of  ` `# numbers upto n whose 2 bits are set  ` ` `  `# To calculate sum of numbers  ` `def` `findSum(n) : ` ` `  `    ``sum` `=` `0` ` `  `    ``# Find numbers whose 2  ` `    ``# bits are set  ` `    ``i ``=` `1` `    ``while``((``1` `<< i) < n ) : ` `        ``for` `j ``in` `range``(``0``, i) :  ` `            ``num ``=` `(``1` `<< i) ``+` `(``1` `<< j)  ` ` `  `            ``# If number is greater then n  ` `            ``# we don't include this in sum  ` `            ``if` `(num <``=` `n) : ` `                ``sum` `+``=` `num ` `         `  `        ``i ``+``=` `1` `         `  `    ``# Return sum of numbers  ` `    ``return` `sum` ` `  `# Driver Code ` `n ``=` `10` `print``(findSum(n)) ` ` `  `# This code is contributed  ` `# by Smitha `

## C#

 `// C# program to find sum of numbers ` `// upto n whose 2 bits are set ` `using` `System; ` ` `  `public` `class` `main { ` ` `  `    ``// To calculate sum of numbers ` `    ``static` `int` `findSum(``int` `n) ` `    ``{ ` `        ``int` `sum = 0; ` ` `  `        ``// Find numbers whose 2 bits are set ` `        ``for` `(``int` `i = 1; 1 << i < n; i++)  ` `        ``{ ` `            ``for` `(``int` `j = 0; j < i; j++)  ` `            ``{ ` `                ``int` `num = (1 << i) + (1 << j); ` `                           `  `                ``// If number is greater then n ` `                ``// we don't include this in sum ` `                ``if` `(num <= n) ` `                    ``sum += num; ` `            ``} ` `        ``} ` ` `  `        ``// Return sum of numbers ` `        ``return` `sum; ` `    ``} ` ` `  `    ``// Driver Code ` `    ``public` `static` `void` `Main(String []args) ` `    ``{ ` `        ``int` `n = 10; ` `        ``Console.WriteLine(findSum(n)); ` `    ``} ` `} ` ` `  `// This Code is contributed by vt_m. `

## PHP

 ` `

Output :

```33
```

This article is contributed by nuclode. 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.

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.

My Personal Notes arrow_drop_up

Article Tags :
Practice Tags :

Be the First to upvote.

Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.