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> |
1
Time Complexity: O(1)
Auxiliary Space: O(1)
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 neveropen!