# Count all pairs with given XOR

Given an array of distinct positive integers and a number x, find the number of pairs of integers in the array whose XOR is equal to x.
Examples:

```Input : arr[] = {5, 4, 10, 15, 7, 6}, x = 5
Output : 1
Explanation :  (10 ^ 15) = 5

Input : arr[] = {3, 6, 8, 10, 15, 50}, x = 5
Output : 2
Explanation : (3 ^ 6) = 5 and (10 ^ 15) = 5
```

## Recommended: Please solve it on “PRACTICE” first, before moving on to the solution.

A Simple solution is to traverse each element and check if there’s another number whose XOR with it is equal to x. This solution takes O(n2) time.

An efficient solution of this problem take O(n) time. The idea is based on the fact that arr[i] ^ arr[j] is equal to x if and only if arr[i] ^ x is equal to arr[j].

```1) Initialize result as 0.
2) Create an empty hash set "s".
3) Do following for each element arr[i] in arr[]
(a)    If x ^ arr[i] is in "s", then increment result by 1.
(b)    Insert arr[i] into the hash set "s".
3) return result.
```

## C++

 `// C++ program to Count all pair with given XOR ` `// value x ` `#include ` ` `  `using` `namespace` `std; ` ` `  `// Returns count of pairs in arr[0..n-1] with XOR ` `// value equals to x. ` `int` `xorPairCount(``int` `arr[], ``int` `n, ``int` `x) ` `{ ` `    ``int` `result = 0; ``// Initialize result ` ` `  `    ``// create empty set that stores the visiting  ` `    ``// element of array.  ` `    ``// Refer below post for details of unordered_set ` `    ``// https://www.geeksforgeeks.org/unorderd_set-stl-uses/ ` `    ``unordered_set<``int``> s; ` ` `  `    ``for` `(``int` `i=0; i

## Java

 `// Java program to Count all pair with  ` `// given XOR value x  ` `import` `java.util.*; ` ` `  `class` `GFG  ` `{ ` ` `  `    ``// Returns count of pairs in arr[0..n-1] with XOR  ` `    ``// value equals to x.  ` `    ``static` `int` `xorPairCount(``int` `arr[], ``int` `n, ``int` `x)  ` `    ``{ ` `        ``int` `result = ``0``; ``// Initialize result  ` ` `  `        ``// create empty set that stores the visiting  ` `        ``// element of array.  ` `        ``// Refer below post for details of unordered_set  ` `        ``// https://www.geeksforgeeks.org/unorderd_set-stl-uses/  ` `        ``HashSet s = ``new` `HashSet(); ` ` `  `        ``for` `(``int` `i = ``0``; i < n; i++)  ` `        ``{ ` `            ``// If there exist an element in set s  ` `            ``// with XOR equals to x^arr[i], that means  ` `            ``// there exist an element such that the  ` `            ``// XOR of element with arr[i] is equal to  ` `            ``// x, then increment count.  ` `            ``if` `(s.contains(x ^ arr[i]) &&  ` `                    ``(x ^ arr[i]) == (``int``) s.toArray()[s.size() - ``1``])  ` `            ``{ ` `                ``result++; ` `            ``} ` ` `  `            ``// Make element visited  ` `            ``s.add(arr[i]); ` `        ``} ` ` `  `        ``// return total count of  ` `        ``// pairs with XOR equal to x  ` `        ``return` `result; ` `    ``} ` ` `  `    ``// Driver code  ` `    ``public` `static` `void` `main(String[] args)  ` `    ``{ ` `        ``int` `arr[] = {``5``, ``4``, ``10``, ``15``, ``7``, ``6``}; ` `        ``int` `n = arr.length; ` `        ``int` `x = ``5``; ` `        ``System.out.print(``"Count of pairs with given XOR = "` `                ``+ xorPairCount(arr, n, x)); ` `    ``} ` `} ` ` `  `// This code contributed by Rajput-Ji `

## Python3

 `# Python3 program to count all the pair  ` `# with given xor ` ` `  `# Returns count of pairs in arr[0..n-1]  ` `# with XOR value equals to x. ` `def` `xorPairCount(arr, n, x): ` `    ``result ``=` `0` `# Initialize result ` `     `  `    ``# create empty set that stores the  ` `    ``# visiting element of array.  ` `    ``s ``=` `set``() ` `    ``for` `i ``in` `range``(``0``, n): ` `         `  `        ``# If there exist an element in set s ` `        ``# with XOR equals to x^arr[i], that  ` `        ``# means there exist an element such  ` `        ``# that the XOR of element with arr[i]   ` `        ``# is equal to x, then increment count. ` `        ``if``(x ^ arr[i] ``in` `s): ` `            ``result ``=` `result ``+` `1` `             `  `        ``# Make element visited ` `        ``s.add(arr[i]) ` `    ``return` `result ` `     `  `# Driver Code ` `if` `__name__ ``=``=` `"__main__"``: ` `    ``arr ``=` `[``5``, ``4``, ``10``, ``15``, ``7``, ``6``] ` `    ``n ``=` `len``(arr) ` `    ``x ``=` `5` `    ``print``(``"Count of pair with given XOR = "` `+` `                ``str``(xorPairCount(arr, n, x))) ` ` `  `# This code is contributed by Anubhav Natani `

## C#

 `// C# program to Count all pair with  ` `// given XOR value x  ` `using` `System; ` `using` `System.Collections.Generic; ` ` `  `class` `GFG  ` `{ ` ` `  `    ``// Returns count of pairs in arr[0..n-1] with XOR  ` `    ``// value equals to x.  ` `    ``static` `int` `xorPairCount(``int` `[]arr, ``int` `n, ``int` `x)  ` `    ``{ ` `        ``int` `result = 0; ``// Initialize result  ` ` `  `        ``// create empty set that stores the visiting  ` `        ``// element of array.  ` `        ``// Refer below post for details of unordered_set  ` `        ``// https://www.geeksforgeeks.org/unorderd_set-stl-uses/  ` `        ``HashSet<``int``> s = ``new` `HashSet<``int``>(); ` ` `  `        ``for` `(``int` `i = 0; i < n; i++)  ` `        ``{ ` `            ``// If there exist an element in set s  ` `            ``// with XOR equals to x^arr[i], that means  ` `            ``// there exist an element such that the  ` `            ``// XOR of element with arr[i] is equal to  ` `            ``// x, then increment count.  ` `            ``if` `(s.Contains(x ^ arr[i]))  ` `            ``{ ` `                ``result++; ` `            ``} ` ` `  `            ``// Make element visited  ` `            ``s.Add(arr[i]); ` `        ``} ` ` `  `        ``// return total count of  ` `        ``// pairs with XOR equal to x  ` `        ``return` `result; ` `    ``} ` ` `  `    ``// Driver code  ` `    ``public` `static` `void` `Main()  ` `    ``{ ` `        ``int` `[]arr = {5, 4, 10, 15, 7, 6}; ` `        ``int` `n = arr.Length; ` `        ``int` `x = 5; ` `        ``Console.WriteLine(``"Count of pairs with given XOR = "` `                ``+ xorPairCount(arr, n, x)); ` `    ``} ` `} ` ` `  `/* This code contributed by PrinciRaj1992 */`

Output:

```Count of pairs with given XOR = 1
```

Time complexity : O(n)

How to handle duplicates?
The above efficient solution doesn’t work if there are duplicates in input array. For example, the above solution produces different results for {2, 2, 5} and {5, 2, 2}. To handle duplicates, we store counts of occurrences of all elements. We use unordered_map instead of unordered_set.

## C++

 `// C++ program to Count all pair with given XOR ` `// value x ` `#include ` ` `  `using` `namespace` `std; ` ` `  `// Returns count of pairs in arr[0..n-1] with XOR ` `// value equals to x. ` `int` `xorPairCount(``int` `arr[], ``int` `n, ``int` `x) ` `{ ` `    ``int` `result = 0; ``// Initialize result ` ` `  `    ``// create empty map that stores counts of ` `    ``// individual elements of array. ` `    ``unordered_map<``int``, ``int``> m; ` ` `  `    ``for` `(``int` `i=0; i

## Java

 `// Java program to Count all pair with given XOR ` `// value x ` `import` `java.util.*; ` ` `  `class` `GFG ` `{ ` ` `  `// Returns count of pairs in arr[0..n-1] with XOR ` `// value equals to x. ` `static` `int` `xorPairCount(``int` `arr[], ``int` `n, ``int` `x) ` `{ ` `    ``int` `result = ``0``; ``// Initialize result ` ` `  `    ``// create empty map that stores counts of ` `    ``// individual elements of array. ` `    ``Map m = ``new` `HashMap<>(); ` ` `  `    ``for` `(``int` `i = ``0``;  i < n ; i++) ` `    ``{ ` `        ``int` `curr_xor = x^arr[i]; ` ` `  `        ``// If there exist an element in map m ` `        ``// with XOR equals to x^arr[i], that means ` `        ``// there exist an element such that the ` `        ``// XOR of element with arr[i] is equal to ` `        ``// x, then increment count. ` `        ``if` `(m.containsKey(curr_xor)) ` `            ``result += m.get(curr_xor); ` ` `  `        ``// Increment count of current element ` `        ``if``(m.containsKey(arr[i])) ` `        ``{ ` `            ``m.put(arr[i], m.get(arr[i]) + ``1``); ` `        ``} ` `        ``else``{ ` `            ``m.put(arr[i], ``1``); ` `        ``} ` `    ``} ` `    ``// return total count of pairs with XOR equal to x ` `    ``return` `result; ` `} ` ` `  `// Driver code ` `public` `static` `void` `main(String[] args)  ` `{ ` `    ``int` `arr[] = {``2``, ``5``, ``2``}; ` `    ``int` `n = arr.length; ` `    ``int` `x = ``0``; ` `    ``System.out.println(``"Count of pairs with given XOR = "` `        ``+ xorPairCount(arr, n, x)); ` `} ` `} ` ` `  `// This code has been contributed by 29AjayKumar `

## Python3

 `# Python3 program to Count all pair with  ` `# given XOR value x ` ` `  `# Returns count of pairs in arr[0..n-1]  ` `# with XOR value equals to x. ` `def` `xorPairCount(arr, n, x): ` ` `  `    ``result ``=` `0` `# Initialize result ` ` `  `    ``# create empty map that stores counts  ` `    ``# of individual elements of array. ` `    ``m ``=` `dict``() ` ` `  `    ``for` `i ``in` `range``(n): ` `     `  `        ``curr_xor ``=` `x ^ arr[i] ` ` `  `        ``# If there exist an element in map m ` `        ``# with XOR equals to x^arr[i], that ` `        ``# means there exist an element such that  ` `        ``# the XOR of element with arr[i] is equal  ` `        ``# to x, then increment count. ` `        ``if` `(curr_xor ``in` `m.keys()): ` `            ``result ``+``=` `m[curr_xor] ` ` `  `        ``# Increment count of current element ` `        ``if` `arr[i] ``in` `m.keys(): ` `            ``m[arr[i]] ``+``=` `1` `        ``else``: ` `            ``m[arr[i]] ``=` `1` `     `  `    ``# return total count of pairs ` `    ``# with XOR equal to x ` `    ``return` `result ` ` `  `# Driver Code ` `arr ``=` `[``2``, ``5``, ``2``] ` `n ``=` `len``(arr) ` `x ``=` `0` `print``(``"Count of pairs with given XOR = "``, ` `                 ``xorPairCount(arr, n, x)) ` ` `  `# This code is contributed by Mohit Kumar `

## C#

 `// C# program to Count all pair with given XOR ` `// value x ` `using` `System;  ` `using` `System.Collections.Generic; ` ` `  `class` `GFG ` `{ ` ` `  `// Returns count of pairs in arr[0..n-1] with XOR ` `// value equals to x. ` `static` `int` `xorPairCount(``int` `[]arr, ``int` `n, ``int` `x) ` `{ ` `    ``int` `result = 0; ``// Initialize result ` ` `  `    ``// create empty map that stores counts of ` `    ``// individual elements of array. ` `    ``Dictionary<``int``,``int``> m = ``new` `Dictionary<``int``,``int``>(); ` ` `  `    ``for` `(``int` `i = 0; i < n ; i++) ` `    ``{ ` `        ``int` `curr_xor = x^arr[i]; ` ` `  `        ``// If there exist an element in map m ` `        ``// with XOR equals to x^arr[i], that means ` `        ``// there exist an element such that the ` `        ``// XOR of element with arr[i] is equal to ` `        ``// x, then increment count. ` `        ``if` `(m.ContainsKey(curr_xor)) ` `            ``result += m[curr_xor]; ` ` `  `        ``// Increment count of current element ` `        ``if``(m.ContainsKey(arr[i])) ` `        ``{ ` `            ``var` `val = m[arr[i]]; ` `            ``m.Remove(arr[i]); ` `            ``m.Add(arr[i], val + 1); ` `        ``} ` `        ``else` `        ``{ ` `            ``m.Add(arr[i], 1); ` `        ``} ` `    ``} ` `     `  `    ``// return total count of pairs with XOR equal to x ` `    ``return` `result; ` `} ` ` `  `// Driver code ` `public` `static` `void` `Main(String[] args)  ` `{ ` `    ``int` `[]arr = {2, 5, 2}; ` `    ``int` `n = arr.Length; ` `    ``int` `x = 0; ` `    ``Console.WriteLine(``"Count of pairs with given XOR = "` `        ``+ xorPairCount(arr, n, x)); ` `} ` `} ` ` `  `// This code has been contributed by 29AjayKumar `

Output:

```Count of pairs with given XOR = 1
```

Time complexity : O(n)

This article is contributed by Nishant_singh(pintu). 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.