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 nint 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 codeint main(){ int n = 5; cout << countUnsetBits(n); return 0;} |
Java
// Java implementation of the approachclass 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 approachusing 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 nfunction 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 codevar 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!
