# Find smallest positive number Y such that Bitwise AND of X and Y is Zero

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 = 3Output :4

4 is the smallest positive number whose bitwise AND with 3 is zeroInput :X = 10Output :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)