# Find number of pairs in an array such that their XOR is 0

Given an array of size N. Find the number of pairs (i, j) such that XOR = 0, and 1 <= i < j <= N.

Examples :

```Input : A[] = {1, 3, 4, 1, 4}
Output : 2
Explanation : Index (0, 3) and (2, 4)

Input : A[] = {2, 2, 2}
Output : 3
```

## Recommended: Please try your approach on {IDE} first, before moving on to the solution.

First Approach : Sorting XOR = 0 is only satisfied when . Therefore, we will first sort the array and then count the frequency of each element. By combinatorics, we can observe that if frequency of some element is then, it will contribute to the answer.

Below is the implementation of above approach :

## C++

 `// C++ program to find number  ` `// of pairs in an array such ` `// that their XOR is 0 ` `#include ` `using` `namespace` `std; ` ` `  `// Function to calculate the ` `// count ` `int` `calculate(``int` `a[], ``int` `n) ` `{ ` `    ``// Sorting the list using ` `    ``// built in function ` `    ``sort(a, a + n); ` ` `  `    ``int` `count = 1; ` `    ``int` `answer = 0; ` ` `  `    ``// Traversing through the ` `    ``// elements ` `    ``for` `(``int` `i = 1; i < n; i++) { ` `     `  `        ``if` `(a[i] == a[i - 1]){ ` ` `  `            ``// Counting frequency of each  ` `            ``// elements ` `            ``count += 1; ` `             `  `        ``}  ` `        ``else`  `        ``{ ` `            ``// Adding the contribution of ` `            ``// the frequency to the answer ` `            ``answer = answer + (count * (count - 1)) / 2; ` `            ``count = 1; ` `        ``} ` `    ``} ` ` `  `    ``answer = answer + (count * (count - 1)) / 2; ` ` `  `    ``return` `answer; ` `} ` ` `  `// Driver Code ` `int` `main() ` `{ ` ` `  `    ``int` `a[] = { 1, 2, 1, 2, 4 }; ` `    ``int` `n = ``sizeof``(a) / ``sizeof``(a); ` ` `  `    ``// Print the count ` `    ``cout << calculate(a, n); ` `    ``return` `0; ` `} ` ` `  `// This article is contributed by Sahil_Bansall. `

## Java

 `// Java program to find number  ` `// of pairs in an array such ` `// that their XOR is 0 ` `import` `java.util.*; ` ` `  `class` `GFG  ` `{ ` `    ``// Function to calculate  ` `    ``// the count ` `    ``static` `int` `calculate(``int` `a[], ``int` `n) ` `    ``{ ` `        ``// Sorting the list using ` `        ``// built in function ` `        ``Arrays.sort(a); ` `     `  `        ``int` `count = ``1``; ` `        ``int` `answer = ``0``; ` `     `  `        ``// Traversing through the ` `        ``// elements ` `        ``for` `(``int` `i = ``1``; i < n; i++)  ` `        ``{ ` `         `  `            ``if` `(a[i] == a[i - ``1``]) ` `            ``{ ` `                ``// Counting frequency of each  ` `                ``// elements ` `                ``count += ``1``; ` `                 `  `            ``}  ` `            ``else` `            ``{ ` `                ``// Adding the contribution of ` `                ``// the frequency to the answer ` `                ``answer = answer + (count * (count - ``1``)) / ``2``; ` `                ``count = ``1``; ` `            ``} ` `        ``} ` `     `  `        ``answer = answer + (count * (count - ``1``)) / ``2``; ` `     `  `        ``return` `answer; ` `    ``} ` `     `  `    ``// Driver Code ` `    ``public` `static` `void` `main (String[] args)  ` `    ``{ ` `        ``int` `a[] = { ``1``, ``2``, ``1``, ``2``, ``4` `}; ` `        ``int` `n = a.length; ` `     `  `        ``// Print the count ` `        ``System.out.println(calculate(a, n)); ` `    ``} ` `} ` ` `  `// This code is contributed by Ansu Kumari. `

## Python3

 `# Python3 program to find number of pairs ` `# in an array such that their XOR is 0 ` ` `  `# Function to calculate the count ` `def` `calculate(a) : ` ` `  `    ``# Sorting the list using ` `    ``# built in function ` `    ``a.sort() ` `     `  `    ``count ``=` `1` `    ``answer ``=` `0` `     `  `    ``# Traversing through the elements ` `    ``for` `i ``in` `range``(``1``, ``len``(a)) : ` ` `  `        ``if` `a[i] ``=``=` `a[i ``-` `1``] : ` `             `  `            ``# Counting frequncy of each elements ` `            ``count ``+``=` `1` ` `  `        ``else` `: ` ` `  `            ``# Adding the contribution of ` `            ``# the frequency to the answer ` `            ``answer ``=` `answer ``+` `count ``*` `(count ``-` `1``) ``/``/` `2` `            ``count ``=` `1` ` `  `    ``answer ``=` `answer ``+` `count ``*` `(count ``-` `1``) ``/``/` `2` `     `  `    ``return` `answer ` ` `  ` `  `# Driver Code ` `if` `__name__ ``=``=` `'__main__'``: ` `     `  `    ``a ``=` `[``1``, ``2``, ``1``, ``2``, ``4``] ` ` `  `    ``# Print the count ` `    ``print``(calculate(a)) `

## C#

 `// C# program to find number  ` `// of pairs in an array such ` `// that their XOR is 0 ` `using` `System; ` ` `  `class` `GFG  ` `{ ` `    ``// Function to calculate  ` `    ``// the count ` `    ``static` `int` `calculate(``int` `[]a, ``int` `n) ` `    ``{ ` `        ``// Sorting the list using ` `        ``// built in function ` `        ``Array.Sort(a); ` `     `  `        ``int` `count = 1; ` `        ``int` `answer = 0; ` `     `  `        ``// Traversing through the ` `        ``// elements ` `        ``for` `(``int` `i = 1; i < n; i++)  ` `        ``{ ` `         `  `            ``if` `(a[i] == a[i - 1]) ` `            ``{ ` `                ``// Counting frequency of each  ` `                ``// elements ` `                ``count += 1; ` `                 `  `            ``}  ` `            ``else` `            ``{ ` `                ``// Adding the contribution of ` `                ``// the frequency to the answer ` `                ``answer = answer + (count * (count - 1)) / 2; ` `                ``count = 1; ` `            ``} ` `        ``} ` `     `  `        ``answer = answer + (count * (count - 1)) / 2; ` `     `  `        ``return` `answer; ` `    ``} ` `     `  `    ``// Driver Code ` `    ``public` `static` `void` `Main ()  ` `    ``{ ` `        ``int` `[]a = { 1, 2, 1, 2, 4 }; ` `        ``int` `n = a.Length; ` `     `  `        ``// Print the count ` `        ``Console.WriteLine(calculate(a, n)); ` `    ``} ` `} ` ` `  `// This code is contributed by vt_m. `

## PHP

 ` `

Output :

```2
```

Time Complexity : O(N Log N)

Second Approach : Hashing (Index Mapping)

Solution is handy, if we can count the frequency of each element in the array. Index mapping technique can be used to count the frequency of each element.

Below is the implementation of above approach :

## C++

 `// C++ program to find number of pairs ` `// in an array such that their XOR is 0 ` `#include ` `using` `namespace` `std; ` ` `  `// Function to calculate the answer ` `int` `calculate(``int` `a[], ``int` `n){ ` `     `  `    ``// Finding the maximum of the array ` `    ``int` `*maximum = max_element(a, a + 5); ` ` `  `    ``// Creating frequency array ` `    ``// With initial value 0 ` `    ``int` `frequency[*maximum + 1] = {0}; ` `     `  `    ``// Traversing through the array  ` `    ``for``(``int` `i = 0; i < n; i++) ` `    ``{  ` `        ``// Counting frequency ` `        ``frequency[a[i]] += 1; ` `    ``} ` `    ``int` `answer = 0; ` `     `  `    ``// Traversing through the frequency array ` `    ``for``(``int` `i = 0; i < (*maximum)+1; i++) ` `    ``{  ` `        ``// Calculating answer ` `        ``answer = answer + frequency[i] * (frequency[i] - 1) ; ` `    ``} ` `    ``return` `answer/2; ` `} ` ` `  `// Driver Code ` `int` `main() ` `{ ` `   ``int` `a[] = {1, 2, 1, 2, 4}; ` `   ``int` `n = ``sizeof``(a) / ``sizeof``(a);  ` `    `  `   ``// Function calling ` `   ``cout << (calculate(a,n)); ` `} ` ` `  `// This code is contributed by Smitha `

## Java

 `// Java program to find number of pairs  ` `// in an array such that their XOR is 0  ` `import` `java.util.*; ` ` `  `class` `GFG  ` `{ ` ` `  `    ``// Function to calculate the answer  ` `    ``static` `int` `calculate(``int` `a[], ``int` `n)  ` `    ``{ ` ` `  `        ``// Finding the maximum of the array  ` `        ``int` `maximum = Arrays.stream(a).max().getAsInt(); ` ` `  `        ``// Creating frequency array  ` `        ``// With initial value 0  ` `        ``int` `frequency[] = ``new` `int``[maximum + ``1``]; ` ` `  `        ``// Traversing through the array  ` `        ``for` `(``int` `i = ``0``; i < n; i++)  ` `        ``{ ` `             `  `            ``// Counting frequency  ` `            ``frequency[a[i]] += ``1``; ` `        ``} ` `        ``int` `answer = ``0``; ` ` `  `        ``// Traversing through the frequency array  ` `        ``for` `(``int` `i = ``0``; i < (maximum) + ``1``; i++)  ` `        ``{ ` `             `  `            ``// Calculating answer  ` `            ``answer = answer + frequency[i] * (frequency[i] - ``1``); ` `        ``} ` `        ``return` `answer / ``2``; ` `    ``} ` ` `  `    ``// Driver Code  ` `    ``public` `static` `void` `main(String[] args)  ` `    ``{ ` `        ``int` `a[] = {``1``, ``2``, ``1``, ``2``, ``4``}; ` `        ``int` `n = a.length; ` ` `  `        ``// Function calling  ` `        ``System.out.println(calculate(a, n)); ` `    ``} ` `} ` ` `  `// This code is contributed by 29AjayKumar `

## Python 3

 `# Python3 program to find number of pairs ` `# in an array such that their XOR is 0 ` ` `  `# Function to calculate the answer ` `def` `calculate(a) : ` `     `  `    ``# Finding the maximum of the array ` `    ``maximum ``=` `max``(a) ` `     `  `    ``# Creating frequency array ` `    ``# With initial value 0 ` `    ``frequency ``=` `[``0` `for` `x ``in` `range``(maximum ``+` `1``)] ` `     `  `    ``# Traversing through the array  ` `    ``for` `i ``in` `a : ` `          `  `        ``# Counting frequency ` `        ``frequency[i] ``+``=` `1` `     `  `    ``answer ``=` `0` `     `  `    ``# Traversing through the frequency array ` `    ``for` `i ``in` `frequency : ` `         `  `        ``# Calculating answer ` `        ``answer ``=` `answer ``+` `i ``*` `(i ``-` `1``) ``/``/` `2` `     `  `    ``return` `answer ` ` `  `# Driver Code ` `a ``=` `[``1``, ``2``, ``1``, ``2``, ``4``] ` `print``(calculate(a)) `

## C#

 `// C# program to find number of pairs  ` `// in an array such that their XOR is 0  ` `using` `System; ` `using` `System.Linq; ` `class` `GFG  ` `{ ` ` `  `    ``// Function to calculate the answer  ` `    ``static` `int` `calculate(``int` `[]a, ``int` `n)  ` `    ``{ ` ` `  `        ``// Finding the maximum of the array  ` `        ``int` `maximum = a.Max(); ` ` `  `        ``// Creating frequency array  ` `        ``// With initial value 0  ` `        ``int` `[]frequency = ``new` `int``[maximum + 1]; ` ` `  `        ``// Traversing through the array  ` `        ``for` `(``int` `i = 0; i < n; i++)  ` `        ``{ ` `             `  `            ``// Counting frequency  ` `            ``frequency[a[i]] += 1; ` `        ``} ` `        ``int` `answer = 0; ` ` `  `        ``// Traversing through the frequency array  ` `        ``for` `(``int` `i = 0; i < (maximum) + 1; i++)  ` `        ``{ ` `             `  `            ``// Calculating answer  ` `            ``answer = answer + frequency[i] *  ` `                             ``(frequency[i] - 1); ` `        ``} ` `        ``return` `answer / 2; ` `    ``} ` ` `  `    ``// Driver Code  ` `    ``public` `static` `void` `Main(String[] args)  ` `    ``{ ` `        ``int` `[]a = {1, 2, 1, 2, 4}; ` `        ``int` `n = a.Length; ` ` `  `        ``// Function calling  ` `        ``Console.WriteLine(calculate(a, n)); ` `    ``} ` `} ` ` `  `// This code is contributed by PrinciRaj1992 `

## PHP

 ` `

Output :

```2
```

Time Complexity : O(N)

Note : Index Mapping method can only be used when the numbers in the array are not large. In such cases, sorting method can be used.

Don’t stop now and take your learning to the next level. Learn all the important concepts of Data Structures and Algorithms with the help of the most trusted course: DSA Self Paced. Become industry ready at a student-friendly price.

My Personal Notes arrow_drop_up Check out this Author's contributed articles.

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.