Given two integers **A** and **B**. The task is to choose an integer **X** such that **(A xor X) + (B xor X)** is the minimum possible.**Examples:**

Input:A = 2, B = 3Output:X = 2, Sum = 1Input:A = 7, B = 8Output:X = 0, Sum = 15

A **simple solution** is to generate all possible sum by taking xor of **A** and **B** with all possible values of **X ≤ min(A, B)**. To generate all possible sums it would take **O(N)** time where **N = min(A, B)**.

An **efficient solution** is based on the fact that the number **X** will contain the set bits only at that index where both **A** and **B** contain a set bit such that after xor operation with **X** that bit will be unset. This would take only **O(Log N)** time.**Other cases:** If at a particular index one or both the numbers contain **0** (unset bit) and the number **X** contains **1** (set bit) then **0** will be set after xor with **X** in **A** and **B** then the sum couldn’t be minimized.

Below is the implementation of the above approach:

## C++

`// C++ implementation of the approach` `#include <iostream>` `using` `namespace` `std;` `// Function to return the integer X such that` `// (A xor X) + (B ^ X) is minimized` `int` `findX(` `int` `A, ` `int` `B)` `{` ` ` `int` `j = 0, x = 0;` ` ` `// While either A or B is non-zero` ` ` `while` `(A || B) ` ` ` `{` ` ` `// Position at which both A and B` ` ` `// have a set bit` ` ` `if` `((A & 1) && (B & 1)) ` ` ` `{` ` ` `// Inserting a set bit in x` ` ` `x += (1 << j);` ` ` `}` ` ` `// Right shifting both numbers to` ` ` `// traverse all the bits` ` ` `A >>= 1;` ` ` `B >>= 1;` ` ` `j += 1;` ` ` `}` ` ` `return` `x;` `}` `// Driver code` `int` `main()` `{` ` ` `int` `A = 2, B = 3;` ` ` `int` `X = findX(A, B);` ` ` `cout << ` `"X = "` `<< X << ` `", Sum = "` ` ` `<< (A ^ X) + (B ^ X);` ` ` `return` `0;` `}` |

*chevron_right*

*filter_none*

## Java

`// Java implementation of the approach` `class` `GFG ` `{` ` ` `// Function to return the integer X such that` ` ` `// (A xor X) + (B ^ X) is minimized` ` ` `static` `int` `findX(` `int` `A, ` `int` `B)` ` ` `{` ` ` `int` `j = ` `0` `, x = ` `0` `;` ` ` `// While either A or B is non-zero` ` ` `while` `(A != ` `0` `|| B != ` `0` `) ` ` ` `{` ` ` `// Position at which both A and B` ` ` `// have a set bit` ` ` `if` `((A % ` `2` `== ` `1` `) && (B % ` `2` `== ` `1` `)) ` ` ` `{` ` ` `// Inserting a set bit in x` ` ` `x += (` `1` `<< j);` ` ` `}` ` ` `// Right shifting both numbers to` ` ` `// traverse all the bits` ` ` `A >>= ` `1` `;` ` ` `B >>= ` `1` `;` ` ` `j += ` `1` `;` ` ` `}` ` ` `return` `x;` ` ` `}` ` ` `// Driver code` ` ` `public` `static` `void` `main(String[] args)` ` ` `{` ` ` `int` `A = ` `2` `, B = ` `3` `;` ` ` `int` `X = findX(A, B);` ` ` `System.out.println(` `"X = "` `+ X + ` `", Sum = "` ` ` `+ ((A ^ X) + (B ^ X)));` ` ` `}` `}` `// This code has been contributed by 29AjayKumar` |

*chevron_right*

*filter_none*

## Python3

`# Python 3 implementation of the approach` `# Function to return the integer X such that` `# (A xor X) + (B ^ X) is minimized` `def` `findX(A,B):` ` ` `j ` `=` `0` ` ` `x ` `=` `0` ` ` `# While either A or B is non-zero` ` ` `while` `(A ` `or` `B):` ` ` ` ` `# Position at which both A and B` ` ` `# have a set bit` ` ` `if` `((A & ` `1` `) ` `and` `(B & ` `1` `)):` ` ` ` ` `# Inserting a set bit in x` ` ` `x ` `+` `=` `(` `1` `<< j)` ` ` `# Right shifting both numbers to` ` ` `# traverse all the bits` ` ` `A >>` `=` `1` ` ` `B >>` `=` `1` ` ` `j ` `+` `=` `1` ` ` `return` `x` `# Driver code` `if` `__name__ ` `=` `=` `'__main__'` `:` ` ` `A ` `=` `2` ` ` `B ` `=` `3` ` ` `X ` `=` `findX(A, B)` ` ` `print` `(` `"X ="` `,X,` `", Sum ="` `,(A ^ X) ` `+` `(B ^ X))` ` ` `# This code is contributed by` `# Surendra_Gangwar` |

*chevron_right*

*filter_none*

## C#

`// C# implementation of the approach` `using` `System;` `class` `GFG ` `{` ` ` `// Function to return the integer X such that` ` ` `// (A xor X) + (B ^ X) is minimized` ` ` `static` `int` `findX(` `int` `A, ` `int` `B)` ` ` `{` ` ` `int` `j = 0, x = 0;` ` ` `// While either A or B is non-zero` ` ` `while` `(A != 0 || B != 0) ` ` ` `{` ` ` `// Position at which both A and B` ` ` `// have a set bit` ` ` `if` `((A % 2 == 1) && (B % 2 == 1)) ` ` ` `{` ` ` `// Inserting a set bit in x` ` ` `x += (1 << j);` ` ` `}` ` ` `// Right shifting both numbers to` ` ` `// traverse all the bits` ` ` `A >>= 1;` ` ` `B >>= 1;` ` ` `j += 1;` ` ` `}` ` ` `return` `x;` ` ` `}` ` ` `// Driver code` ` ` `public` `static` `void` `Main(String[] args)` ` ` `{` ` ` `int` `A = 2, B = 3;` ` ` `int` `X = findX(A, B);` ` ` `Console.WriteLine(` `"X = "` `+ X + ` `", Sum = "` ` ` `+ ((A ^ X) + (B ^ X)));` ` ` `}` `}` `// This code has been contributed by 29AjayKumar` |

*chevron_right*

*filter_none*

## PHP

`<?php` `// PHP implementation of the approach` `// Function to return the integer X such that` `// (A xor X) + (B ^ X) is minimized` `function` `findX(` `$A` `, ` `$B` `)` `{` ` ` `$j` `= 0;` ` ` `$x` `= 0;` ` ` `// While either A or B is non-zero` ` ` `while` `(` `$A` `|| ` `$B` `) {` ` ` `// Position at which both A and B` ` ` `// have a set bit` ` ` `if` `((` `$A` `& 1) && (` `$B` `& 1)) ` ` ` `{` ` ` `// Inserting a set bit in x` ` ` `$x` `+= (1 << ` `$j` `);` ` ` `}` ` ` `// Right shifting both numbers to` ` ` `// traverse all the bits` ` ` `$A` `>>= 1;` ` ` `$B` `>>= 1;` ` ` `$j` `+= 1;` ` ` `}` ` ` `return` `$x` `;` `}` `// Driver code` ` ` `$A` `= 2;` ` ` `$B` `= 3;` ` ` `$X` `= findX(` `$A` `, ` `$B` `);` ` ` `echo` `"X = "` `, ` `$X` `, ` `", Sum = "` `,` ` ` `(` `$A` `^ ` `$X` `) + (` `$B` `^ ` `$X` `);` `// This code is contributed by ajit.` `?>` |

*chevron_right*

*filter_none*

**Output:**

X = 2, Sum = 1

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the **DSA Self Paced Course** at a student-friendly price and become industry ready.

## Recommended Posts:

- Choose an integer K such that maximum of the xor values of K with all Array elements is minimized
- Find a point such that sum of the Manhattan distances is minimized
- Delete odd and even numbers at alternate step such that sum of remaining elements is minimized
- Partition the array into two odd length groups with minimized absolute difference between their median
- Divide a sorted array in K parts with sum of difference of max and min minimized in each part
- Select K elements from an array whose maximum value is minimized
- Choose points from two ranges such that no point lies in both the ranges
- Ways to choose balls such that at least one ball is chosen
- Choose two elements from the given array such that their sum is not present in any of the arrays
- Number of ways to choose a pair containing an even and an odd number from 1 to N
- Find if it is possible to choose subarray that it contains exactly K even integers
- Puzzle | Choose the game of Rolling Dice
- Given a set, find XOR of the XOR's of all subsets.
- Find XOR of two number without using XOR operator
- Count minimum bits to flip such that XOR of A and B equal to C
- Count all Quadruples from four arrays such that their XOR equals to 'x'
- Find smallest number n such that n XOR n+1 equals to given k.
- Find number of pairs in an array such that their XOR is 0
- Count ordered pairs of positive numbers such that their sum is S and XOR is K
- Minimum value of N such that xor from 1 to N is equal to K

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.