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> |
4
Time Complexity: O(n * log n)
Auxiliary Space: O(1)
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 neveropen!