Related Articles
Sum of numbers with exactly 2 bits set
• Difficulty Level : Medium
• Last Updated : 28 Apr, 2021

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`

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

 ``

## Javascript

 ``

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.