Skip to content
Related Articles

Related Articles

Improve Article

Find all possible pairs with given Bitwise OR and Bitwise XOR values

  • Last Updated : 28 Jun, 2021

Given two positive integers A and B representing Bitwise XOR and Bitwise OR of two positive integers, the task is to find all possible pairs (x, y) such that x ^ y is equal to A and x | y is equal to B.

Examples:

Input: A = 5, B = 7
Output:
2 7
3 6
6 3
7 2
Explanation:
7( XOR )2 = 5 and 7( OR )2 = 7
3( XOR )6 = 5 and 3( OR )6 = 7

Input: A = 8, B = 10
Output:
2 10
10 2

Naive Approach: The simplest approach to solve the problem is to generate all possible pairs and for each pair, check if their Bitwise XOR and Bitwise OR are equal to A and B respectively. 



Time Complexity: O(B2)
Auxiliary Space: O(1)

Efficient Approach: The idea is to traverse through all possible values of x and use the property of XOR that if x ^ y = A, then x ^ A = y to find all possible values of y. Follow the steps below to solve the problem:

  • Iterate from 1 to B using a variable, say i, and perform the following operations: 
    • Initialize a variable y as i ^ A.
    • Check if the value of y is greater than 0 and (i | y) is equal to B or not.
    • If found to be true, then print the values of i and y.

Below is the implementation of the above approach:

C++




// C++ code for the above approach
#include <bits/stdc++.h>
using namespace std;
 
// Function to find pairs with
// XOR equal to A and OR equal to B
void findPairs(int A, int B)
{
    // Iterate from 1 to B
    for (int i = 1; i <= B; i++) {
        int y = A ^ i;
 
        // Check if (i OR y) is B
        if (y > 0 and (i | y) == B) {
            cout << i << " " << y << endl;
        }
    }
}
 
// Driver Code
int main()
{
    int A = 8, B = 10;
 
    findPairs(A, B);
    return 0;
}

Java




// Java code for the above approach
import java.util.*;
 
class GFG{
 
// Function to find pairs with
// XOR equal to A and OR equal to B
static void findPairs(int A, int B)
{
     
    // Iterate from 1 to B
    for(int i = 1; i <= B; i++)
    {
        int y = A ^ i;
 
        // Check if (i OR y) is B
        if (y > 0 && (i | y) == B)
        {
            System.out.println(i + " " + y);
        }
    }
}
 
// Driver Code
public static void main(String[] args)
{
    int A = 8, B = 10;
 
    findPairs(A, B);
}
}
 
// This code is contributed by Hritik

Python3




# Python3 code for the above approach
 
# Function to find pairs with
# XOR equal to A and OR equal to B
def findPairs(A, B):
     
    # Iterate from 1 to B
    for i in range(1, B + 1):
         
        y = A ^ i
         
        # Check if (i OR y) is B
        if (y > 0 and (i | y) == B):
            print(i, " ", y)
 
# Driver Code
A = 8
B = 10
 
findPairs(A, B)
 
# This code is contributed by amreshkumar3

Javascript




<script>
 
// JavaScript code for the above approach
 
 
// Function to find pairs with
// XOR equal to A and OR equal to B
function findPairs(A, B) {
    // Iterate from 1 to B
    for (let i = 1; i <= B; i++) {
        let y = A ^ i;
 
        // Check if (i OR y) is B
        if (y > 0 && (i | y) == B) {
            document.write(i + " " + y + "<br>");
        }
    }
}
 
// Driver Code
 
let A = 8, B = 10;
 
findPairs(A, B);
 
 
// This code is contributed by gfgking
 
</script>
Output: 
2 10
10 2

 

Time Complexity: O(B)
Auxiliary Space: O(1)

 

Attention reader! Don’t stop learning now. Get hold of all the important mathematical concepts for competitive programming with the Essential Maths for CP Course at a student-friendly price. To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.




My Personal Notes arrow_drop_up
Recommended Articles
Page :