Open In App

Minimum number using set bits of a given number

Given an unsigned number, find the minimum number that could be formed by using the bits of the given unsigned number.

Examples :



Input : 6 
Output : 3 
Binary representation of 6 is 0000….0110. Smallest number with same number of set bits 0000….0011. 
  
Input : 11 
Output : 7 

Simple Approach: 
1. Find binary representation of the number using simple decimal to binary representation technique. 
2. Count number of set bits in the binary representation equal to ‘n’. 
3. Create a binary representation with it’s ‘n’ least significant bits set to 1. 
4. Convert the binary representation back to the number.
Efficient Approach: 
1. Just measure the number of 1’s present in the bit representation of the number. 
2. (Number of set bits raised to the power of 2) – 1 represents the minimized number.






// An efficient C++ program to find
// minimum number formed by bits of a given number.
#include <bits/stdc++.h>
#define ll unsigned int
using namespace std;
 
// Returns minimum number formed by
// bits of a given number.
ll minimize(ll a)
{
    // _popcnt32(a) gives number of 1's
    // present in binary representation
    // of a.
    ll n = _popcnt32(a);
 
    return (pow(2, n) - 1);
}
 
// Driver function.
int main()
{
    ll a = 11;
    cout << minimize(a) << endl;
    return 0;
}




// An efficient Java program to
// find minimum number formed
// by bits of a given number.
import java.io.*;
 
class GFG
{
    public static int _popcnt32(long number)
    {
        int count = 0;
        while (number > 0)
        {
            count += number & 1L;
            number >>= 1L;
        }
        return count;
    }
     
    // Returns minimum number formed
    // by bits of a given number.
    static long minimize(long a)
    {
        // _popcnt32(a) gives number
        // of 1's present in binary
        // representation of a.
        int n = _popcnt32(a);
 
        return ((long)Math.pow(2, n) - 1);
    }
     
    // Driver Code.
    public static void main(String args[])
    {
        long a = 11;
        System.out.print(minimize(a));
    }
}
 
// This code is contributed by
// Manish Shaw(manishshaw1)




# An efficient Python3 program
# to find minimum number formed
# by bits of a given number.
 
# Returns minimum number formed by
# bits of a given number.
def minimize(a):
     
    # _popcnt32(a) gives number of 1's
    # present in binary representation
    # of a.
    n = bin(a).count("1")
 
    return (pow(2, n) - 1)
 
# Driver Code
a = 11
print(minimize(a))
 
# This code is contributed by Mohit Kumar




// An efficient C# program to
// find minimum number formed
// by bits of a given number.
using System;
using System.Linq;
using System.Collections.Generic;
 
class GFG
{
    // Returns minimum number formed
    // by bits of a given number.
    static long minimize(long a)
    {
        // _popcnt32(a) gives number
        // of 1's present in binary 
        // representation of a.
        string binaryString = Convert.ToString(a, 2);
        int n = binaryString.Split(new [] {'0'},
                StringSplitOptions.RemoveEmptyEntries).Length + 1;
 
        return ((long)Math.Pow(2, n) - 1);
    }
     
    // Driver Code.
    static void Main()
    {
        long a = 11;
        Console.Write(minimize(a));
    }
}
 
// This code is contributed by
// Manish Shaw(manishshaw1)




<script>
// An efficient Javascript program to
// find minimum number formed
// by bits of a given number.
     
    function _popcnt32(number)
    {
        let count = 0;
        while (number > 0)
        {
            count += number & 1;
            number >>= 1;
        }
        return count;
    }
     
    // Returns minimum number formed
    // by bits of a given number.
    function minimize(a)
    {
     
        // _popcnt32(a) gives number
        // of 1's present in binary
        // representation of a.
        let n = _popcnt32(a);
   
        return (Math.pow(2, n) - 1);
    }
     
    // Driver Code.
    let a = 11;
    document.write(minimize(a));
     
// This code is contributed by unknown2108
</script>

Time Complexity: O(log N), as the _popcnt32 has a time complexity O(logN), however, _popcnt32 has a maximum value of O(log32), so it can be interpreted as O(1) as well.
Auxiliary Space: O(1)
Note : The above code uses GCC specific functions. If we wish to write code for other compilers, we may use Count set bits in an integer.


Article Tags :