Sum of numbers with exactly 2 bits set

31 May, 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++
Java
Python3
C#
PHP
Javascript
// CPP program to find sum of numbers// upto n whose 2 bits are set#include <bits/stdc++.h>using namespace std; // To count number of set bitsint countSetBits(int n){    int count = 0;    while (n) {        n &= (n - 1);        count++;    }    return count;} // To calculate sum of numbersint 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 functionint main(){    int n = 10;    cout << findSum(n);    return 0;}
// Java program to find sum of numbers// upto n whose 2 bits are setpublic 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));    }}
# Python program to find# sum of numbers# upto n whose 2 bits are set # To count number of set bitsdef countSetBits(n):     count = 0    while (n):        n =n & (n - 1)        count=count + 1         return count # To calculate sum of numbersdef 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 coden = 10print(findSum(n)) # This code is contributed# by Anant Agarwal.
// C# program to find sum of// numbers upto n whose 2// bits are setusing 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// PHP program to find sum of numbers// upto n whose 2 bits are set // To count number of set bitsfunction countSetBits($n){    $count = 0;    while ($n)    {        $n &= ($n - 1);        $count++;    }    return $count;} // To calculate sum of numbersfunction findSum($n){    $sum = 0;     // To count sum of number    // whose 2 bit are set    for ($i = 1; $i <= $n; $i++)        if (countSetBits($i) == 2)            $sum += $i;     return $sum;}     // Driver Code    $n = 10;    echo findSum($n);     // This code is contributed by anuj_67.?>
<script> // Javascript program to find sum of numbers// upto n whose 2 bits are set // To count number of set bitsfunction countSetBits(n){    let count = 0;    while (n) {        n &= (n - 1);        count++;    }    return count;} // To calculate sum of numbersfunction findSum(n){    let sum = 0;     // To count sum of number    // whose 2 bit are set    for (let i = 1; i <= n; i++)        if (countSetBits(i) == 2)            sum += i;     return sum;} // Driver program to test above function     let n = 10;    document.write(findSum(n));      // This code is contributed by Mayank Tyagi</script>
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++
Java
Python3
C#
PHP
Javascript
// C++ program to find sum of numbers// upto n whose 2 bits are set#include <bits/stdc++.h>using namespace std; // To calculate sum of numbersint 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 program to find sum of numbers// upto n whose 2 bits are setpublic 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 program to find sum of# numbers upto n whose 2 bits are set # To calculate sum of numbersdef 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 Coden = 10print(findSum(n)) # This code is contributed# by Smitha
// C# program to find sum of numbers// upto n whose 2 bits are setusing 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<?php// PHP program to find sum of numbers// upto n whose 2 bits are set // To calculate sum of numbersfunction findSum($n){    $sum = 0;     // Find numbers whose 2 bits are set    for ($i = 1; (1 << $i) < $n; $i++)    {        for ($j = 0; $j < $i; $j++)        {            $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$n = 10;echo findSum($n); // This code is contributed by Ajit?>
<script>    // Javascript program to find sum of numbers    // upto n whose 2 bits are set         // To calculate sum of numbers    function findSum(n)    {        let sum = 0;          // Find numbers whose 2 bits are set        for (let i = 1; 1 << i < n; i++)        {            for (let j = 0; j < i; j++)            {                let 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;    }         let n = 10;      document.write(findSum(n));     </script>
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. 
vt_m
jit_t
Smitha Dinesh Semwal
mayanktyagi1709
decode2207
ranjanrohit840
Bit Magic
Bit Magic
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Bits manipulation (Important tactics)
Divide two integers without using multiplication, division and mod operator
Bit Fields in C
Find the element that appears once
Add two numbers without using arithmetic operators
C++ bitset and its application
Set, Clear and Toggle a given bit of a number in C
Find the two non-repeating elements in an array of repeating elements/ Unique Numbers 2
Cyclic Redundancy Check and Modulo-2 Division
Position of rightmost set bit