Skip to content
Related Articles

Related Articles

Minimum number using set bits of a given number
  • Last Updated : 23 Aug, 2019

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.



C++




// 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;
}


Java




// 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)


Python3




# 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


C#




// 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)



Output :

7

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.

competitive-programming-img

My Personal Notes arrow_drop_up
Recommended Articles
Page :