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 :

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[0]);           // 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.

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.