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.