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++
#include <bits/stdc++.h>
using namespace std;
int countSetBits( int n)
{
int count = 0;
while (n) {
n &= (n - 1);
count++;
}
return count;
}
int findSum( int n)
{
int sum = 0;
for ( int i = 1; i <= n; i++)
if (countSetBits(i) == 2)
sum += i;
return sum;
}
int main()
{
int n = 10;
cout << findSum(n);
return 0;
}
|
Java
public class Main {
static int countSetBits( int n)
{
int count = 0 ;
while (n > 0 ) {
n &= (n - 1 );
count++;
}
return count;
}
static int findSum( int n)
{
int sum = 0 ;
for ( int i = 1 ; i <= n; i++)
if (countSetBits(i) == 2 )
sum += i;
return sum;
}
public static void main(String[] args)
{
int n = 10 ;
System.out.println(findSum(n));
}
}
|
Python3
def countSetBits(n):
count = 0
while (n):
n = n & (n - 1 )
count = count + 1
return count
def findSum(n):
sum = 0
for i in range ( 1 ,n + 1 ):
if (countSetBits(i) = = 2 ):
sum = sum + i
return sum
n = 10
print (findSum(n))
|
C#
using System;
class GFG
{
static int countSetBits( int n)
{
int count = 0;
while (n > 0)
{
n = n & (n - 1);
count++;
}
return count;
}
static int findSum( int n)
{
int sum = 0;
for ( int i = 1; i <= n; i++)
if (countSetBits(i) == 2)
sum += i;
return sum;
}
static public void Main ()
{
int n = 10;
Console.WriteLine(findSum(n));
}
}
|
PHP
<?php
function countSetBits( $n )
{
$count = 0;
while ( $n )
{
$n &= ( $n - 1);
$count ++;
}
return $count ;
}
function findSum( $n )
{
$sum = 0;
for ( $i = 1; $i <= $n ; $i ++)
if (countSetBits( $i ) == 2)
$sum += $i ;
return $sum ;
}
$n = 10;
echo findSum( $n );
?>
|
Javascript
<script>
function countSetBits(n)
{
let count = 0;
while (n) {
n &= (n - 1);
count++;
}
return count;
}
function findSum(n)
{
let sum = 0;
for (let i = 1; i <= n; i++)
if (countSetBits(i) == 2)
sum += i;
return sum;
}
let n = 10;
document.write(findSum(n));
</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++
#include <bits/stdc++.h>
using namespace std;
int findSum( int n)
{
int sum = 0;
for ( int i = 1; (1 << i) < n; i++) {
for ( int j = 0; j < i; j++) {
int num = (1 << i) + (1 << j);
if (num <= n)
sum += num;
}
}
return sum;
}
int main()
{
int n = 10;
cout << findSum(n);
return 0;
}
|
Java
public class Main {
static int findSum( int n)
{
int sum = 0 ;
for ( int i = 1 ; 1 << i < n; i++) {
for ( int j = 0 ; j < i; j++) {
int num = ( 1 << i) + ( 1 << j);
if (num <= n)
sum += num;
}
}
return sum;
}
public static void main(String[] args)
{
int n = 10 ;
System.out.println(findSum(n));
}
}
|
Python3
def findSum(n) :
sum = 0
i = 1
while (( 1 << i) < n ) :
for j in range ( 0 , i) :
num = ( 1 << i) + ( 1 << j)
if (num < = n) :
sum + = num
i + = 1
return sum
n = 10
print (findSum(n))
|
C#
using System;
public class main {
static int findSum( int n)
{
int sum = 0;
for ( int i = 1; 1 << i < n; i++)
{
for ( int j = 0; j < i; j++)
{
int num = (1 << i) + (1 << j);
if (num <= n)
sum += num;
}
}
return sum;
}
public static void Main(String []args)
{
int n = 10;
Console.WriteLine(findSum(n));
}
}
|
PHP
<?php
<?php
function findSum( $n )
{
$sum = 0;
for ( $i = 1; (1 << $i ) < $n ; $i ++)
{
for ( $j = 0; $j < $i ; $j ++)
{
$num = (1 << $i ) + (1 << $j );
if ( $num <= $n )
$sum += $num ;
}
}
return $sum ;
}
$n = 10;
echo findSum( $n );
?>
|
Javascript
<script>
function findSum(n)
{
let sum = 0;
for (let i = 1; 1 << i < n; i++)
{
for (let j = 0; j < i; j++)
{
let num = (1 << i) + (1 << j);
if (num <= n)
sum += num;
}
}
return sum;
}
let n = 10;
document.write(findSum(n));
</script>
|
Output :
33
Time Complexity : O((log n)*(log n))
Space Complexity : O(1)
Last Updated :
08 Sep, 2022
Like Article
Save Article
Share your thoughts in the comments
Please Login to comment...