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
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 <bits/stdc++.h> 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
<?php // PHP program to find sum of numbers // upto n whose 2 bits are set // To count number of set bits function countSetBits( $n ) { $count = 0; while ( $n ) { $n &= ( $n - 1); $count ++; } return $count ; } // To calculate sum of numbers function 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. ?> |
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 <bits/stdc++.h> 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
<?php <?php // PHP program to find sum of numbers // upto n whose 2 bits are set // To calculate sum of numbers function 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 ?> |
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.
Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.
Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.