 GFG App
Open App Browser
Continue

# Sum of numbers with exactly 2 bits set

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.