Given an integer X. The task is to find the smallest positive number Y(> 0) such that X AND Y is zero.
Examples:
Input : X = 3
Output : 4
4 is the smallest positive number whose bitwise AND with 3 is zero
Input : X = 10
Output : 1
Approach :
There are 2 cases :
- If the binary representation of X contains all 1s, in that case, all the bits of Y should be 0 to make the result of AND operation is zero. Then X+1 is our answer which is the first positive integer.
- If the binary representation of X doesn’t contain all 1s, in that case, find the first position in X at which bit is 0. Then our answer will be power(2, position)
Below is the implementation of the above approach :
C++
// C++ program to find smallest number Y for // a given value of X such that X AND Y is zero #include <bits/stdc++.h> #define mod 1000000007 using namespace std;
// Method to find smallest number Y for // a given value of X such that X AND Y is zero int findSmallestNonZeroY( int A_num)
{ // Convert the number into its binary form
string A_binary = bitset<8>(A_num).to_string();
int B = 1;
int length = A_binary.size();
int no_ones = __builtin_popcount(A_num);
// Case 1 : If all bits are ones,
// then return the next number
if (length == no_ones )
return A_num + 1;
// Case 2 : find the first 0-bit
// index and return the Y
for ( int i=0;i<length;i++)
{
char ch = A_binary[length - i - 1];
if (ch == '0' )
{
B = pow (2.0, i);
break ;
}
}
return B;
} // Driver Code int main()
{ int X = findSmallestNonZeroY(10);
cout << X;
} // This code is contributed by mohit kumar 29 |
Java
// Java program to find smallest number Y for // a given value of X such that X AND Y is zero import java.lang.*;
public class Main {
// Method to find smallest number Y for
// a given value of X such that X AND Y is zero
static long findSmallestNonZeroY( long A_num)
{
// Convert the number into its binary form
String A_binary = Long.toBinaryString(A_num);
long B = 1 ;
int len = A_binary.length();
int no_ones = Long.bitCount(A_num);
// Case 1 : If all bits are ones,
// then return the next number
if (len == no_ones) {
return A_num + 1 ;
}
// Case 2 : find the first 0-bit
// index and return the Y
for ( int i = 0 ; i < len; i++) {
char ch = A_binary.charAt(len - i - 1 );
if (ch == '0' ) {
B = ( long )Math.pow( 2.0 , ( double )i);
break ;
}
}
return B;
}
// Driver code
public static void main(String[] args)
{
long X = findSmallestNonZeroY( 10 );
System.out.println(X);
}
} |
Python3
# Python3 program to find smallest number Y for # a given value of X such that X AND Y is zero # Method to find smallest number Y for # a given value of X such that X AND Y is zero def findSmallestNonZeroY(A_num) :
# Convert the number into its binary form
A_binary = bin (A_num)
B = 1
length = len (A_binary);
no_ones = (A_binary).count( '1' );
# Case 1 : If all bits are ones,
# then return the next number
if length = = no_ones :
return A_num + 1 ;
# Case 2 : find the first 0-bit
# index and return the Y
for i in range (length) :
ch = A_binary[length - i - 1 ];
if (ch = = '0' ) :
B = pow ( 2.0 , i);
break ;
return B;
# Driver Code if __name__ = = "__main__" :
X = findSmallestNonZeroY( 10 );
print (X)
# This code is contributed by AnkitRai01 |
C#
// C# program to find smallest number Y for // a given value of X such that X AND Y is zero using System;
class GFG
{ // Method to find smallest number Y for
// a given value of X such that X AND Y is zero
static long findSmallestNonZeroY( long A_num)
{
// Convert the number into its binary form
String A_binary = Convert.ToString(A_num, 2);
long B = 1;
int len = A_binary.Length;
int no_ones = bitCount(A_num);
// Case 1 : If all bits are ones,
// then return the next number
if (len == no_ones)
{
return A_num + 1;
}
// Case 2 : find the first 0-bit
// index and return the Y
for ( int i = 0; i < len; i++)
{
char ch = A_binary[len - i - 1];
if (ch == '0' )
{
B = ( long )Math.Pow(2.0, ( double )i);
break ;
}
}
return B;
}
static int bitCount( long x)
{
// To store the count
// of set bits
int setBits = 0;
while (x != 0)
{
x = x & (x - 1);
setBits++;
}
return setBits;
}
// Driver code
public static void Main(String[] args)
{
long X = findSmallestNonZeroY(10);
Console.WriteLine(X);
}
} // This code is contributed by 29AjayKumar |
Javascript
<script> // Javascript program to find smallest number Y for // a given value of X such that X AND Y is zero // Method to find smallest number Y for // a given value of X such that X AND Y is zero
function findSmallestNonZeroY(A_num)
{ // Convert the number into its binary form
let A_binary = (A_num >>> 0).toString(2);
let B = 1;
let len = A_binary.length;
let no_ones = bitCount(A_num);
// Case 1 : If all bits are ones,
// then return the next number
if (len == no_ones) {
return A_num + 1;
}
// Case 2 : find the first 0-bit
// index and return the Y
for (let i = 0; i < len; i++) {
let ch = A_binary[len - i - 1];
if (ch == '0' ) {
B = Math.floor(Math.pow(2.0, i));
break ;
}
}
return B;
} function bitCount(x)
{ // To store the count
// of set bits
let setBits = 0;
while (x != 0)
{
x = x & (x - 1);
setBits++;
}
return setBits;
} // Driver code let X = findSmallestNonZeroY(10); document.write(X); // This code is contributed by unknown2108 </script> |
Output:
1
Time Complexity: O(1)
Auxiliary Space: O(1)