Given a positive integer N, the task is to count the total number of unset bits in the binary representation of all the numbers from 1 to N. Note that leading zeroes will not be counted as unset bits.
Examples:
Input: N = 5
Output: 4
Integer Binary Representation Count of unset bits 1 1 0 2 10 1 3 11 0 4 100 2 5 101 1 0 + 1 + 0 + 2 + 1 = 4
Input: N = 14
Output: 17
Approach:
- Iterate the loop from 1 to N.
- While number is greater than 0 divide it by 2 and check the remainder.
- If remainder is equal to 0 then increase the value of count by 1.
Below is the implementation of the above approach:
C++
// C++ implementation of the approach #include <bits/stdc++.h> using namespace std;
// Function to return the count of unset // bits in the binary representation of // all the numbers from 1 to n int countUnsetBits( int n)
{ // To store the count of unset bits
int cnt = 0;
// For every integer from the range [1, n]
for ( int i = 1; i <= n; i++) {
// A copy of the current integer
int temp = i;
// Count of unset bits in
// the current integer
while (temp) {
// If current bit is unset
if (temp % 2 == 0)
cnt++;
temp = temp / 2;
}
}
return cnt;
} // Driver code int main()
{ int n = 5;
cout << countUnsetBits(n);
return 0;
} |
Java
// Java implementation of the approach class GFG
{ // Function to return the count of unset
// bits in the binary representation of
// all the numbers from 1 to n
static int countUnsetBits( int n)
{
// To store the count of unset bits
int cnt = 0 ;
// For every integer from the range [1, n]
for ( int i = 1 ; i <= n; i++)
{
// A copy of the current integer
int temp = i;
// Count of unset bits in
// the current integer
while (temp > 0 )
{
// If current bit is unset
if (temp % 2 == 0 )
{
cnt = cnt + 1 ;
}
temp = temp / 2 ;
}
}
return cnt;
}
// Driver code
public static void main(String[] args)
{
int n = 5 ;
System.out.println(countUnsetBits(n));
}
} // This code is contributed by 29AjayKumar |
Python3
# Python3 implementation of the approach # Function to return the count of unset # bits in the binary representation of # all the numbers from 1 to n def countUnsetBits(n) :
# To store the count of unset bits
cnt = 0 ;
# For every integer from the range [1, n]
for i in range ( 1 , n + 1 ) :
# A copy of the current integer
temp = i;
# Count of unset bits in
# the current integer
while (temp) :
# If current bit is unset
if (temp % 2 = = 0 ) :
cnt + = 1 ;
temp = temp / / 2 ;
return cnt;
# Driver code if __name__ = = "__main__" :
n = 5 ;
print (countUnsetBits(n));
# This code is contributed by AnkitRai01 |
C#
// C# implementation of the approach using System;
class GFG
{ // Function to return the count of unset
// bits in the binary representation of
// all the numbers from 1 to n
static int countUnsetBits( int n)
{
// To store the count of unset bits
int cnt = 0;
// For every integer from the range [1, n]
for ( int i = 1; i <= n; i++)
{
// A copy of the current integer
int temp = i;
// Count of unset bits in
// the current integer
while (temp > 0)
{
// If current bit is unset
if (temp % 2 == 0)
cnt = cnt + 1;
temp = temp / 2;
}
}
return cnt;
}
// Driver code
public static void Main()
{
int n = 5;
Console.Write(countUnsetBits(n));
}
} // This code is contributed by Sanjit_Prasad |
Javascript
<script> // Javascript implementation of the approach // Function to return the count of unset // bits in the binary representation of // all the numbers from 1 to n function countUnsetBits(n)
{ // To store the count of unset bits
var cnt = 0;
// For every integer from the range [1, n]
for ( var i = 1; i <= n; i++) {
// A copy of the current integer
var temp = i;
// Count of unset bits in
// the current integer
while (temp) {
// If current bit is unset
if (temp % 2 == 0)
cnt++;
temp = parseInt(temp / 2);
}
}
return cnt;
} // Driver code var n = 5;
document.write( countUnsetBits(n)); </script> |
Output:
4
Time Complexity: O(n * log n)
Auxiliary Space: O(1)
Recommended Articles