Skip to content
Related Articles

Related Articles

Improve Article

Count total unset bits in all the numbers from 1 to N

  • Last Updated : 15 Apr, 2021

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:
 

IntegerBinary RepresentationCount of unset bits
110
2101
3110
41002
51011

0 + 1 + 0 + 2 + 1 = 4
Input: N = 14 
Output: 17 
 

 

Approach: 
 



  1. Iterate the loop from 1 to N.
  2. While number is greater than 0 divide it by 2 and check the remainder.
  3. 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

 

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.  To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

In case you wish to attend live classes with experts, please refer DSA Live Classes for Working Professionals and Competitive Programming Live for Students.




My Personal Notes arrow_drop_up
Recommended Articles
Page :