# Sum of numbers with exactly 2 bits set

• Difficulty Level : Medium
• Last Updated : 08 Sep, 2022

Given a number n. Find the sum of all numbers up to n whose 2 bits are set.

Examples:

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

Input : 100
Output : 762```

Naive Approach: Find each number up to 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

 ``

## Javascript

 ``

Output:

`33`

Time Complexity : O(n)

Space Complexity : O(1)

Efficient Approach: The number whose 2 bits are set is of the form 2^x + 2^y and this number is less than n. So we have to find only numbers in the range up to 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 than 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 than 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 than 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 than 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

 ``

## Javascript

 ``

Output :

`33`

Time Complexity : O((log n)*(log n))

Space Complexity : O(1)
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 review-team@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.
Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.

My Personal Notes arrow_drop_up
Recommended Articles
Page :