# 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.