Related Articles
Count pairs with Odd XOR
• Difficulty Level : Easy
• Last Updated : 28 Apr, 2021

Given an array of n integers. Find out number of pairs in array whose XOR is odd.
Examples :

```Input : arr[] = { 1, 2, 3 }
Output : 2
All pairs of array
1 ^ 2 = 3
1 ^ 3 = 2
2 ^ 3 = 1

Input : arr[] = { 1, 2, 3, 4 }
Output : 4```

Naive Approach: We can find pairs whose XOR is odd by running two loops. If XOR of two number is odd increase count of pairs.

C++

 `// C++ program to count pairs in array``// whose XOR is odd``#include ``using` `namespace` `std;` `// A function will return number of pair``// whose XOR is odd``int` `countXorPair(``int` `arr[], ``int` `n)``{``    ``// To store count of XOR pair``    ``int` `count = 0;` `    ``for` `(``int` `i = 0; i < n; i++) {``        ``for` `(``int` `j = i + 1; j < n; j++)` `            ``// If XOR is odd increase count``            ``if` `((arr[i] ^ arr[j]) % 2 == 1)``                ``count++;``    ``}` `    ``// Return count``    ``return` `count;``}` `// Driver program to test countXorPair()``int` `main()``{``    ``int` `arr[] = { 1, 2, 3 };``    ``int` `n = ``sizeof``(arr) / ``sizeof``(arr[0]);``    ``cout << countXorPair(arr, n);` `    ``return` `0;``}`

Java

 `// Java program to count pairs in array whose``// XOR is odd``public` `class` `CountXor {``    ``// A function will return number of pair``    ``// whose XOR is odd``    ``static` `int` `countXorPair(``int` `arr[], ``int` `n)``    ``{``        ``// To store count of XOR pair``        ``int` `count = ``0``;` `        ``for` `(``int` `i = ``0``; i < n; i++) {``            ``for` `(``int` `j = i + ``1``; j < n; j++)` `                ``// If XOR is odd increase count``                ``if` `((arr[i] ^ arr[j]) % ``2` `== ``1``)``                    ``count++;``        ``}` `        ``// Return count``        ``return` `count;``    ``}` `    ``// Driver program to test countXorPair()``    ``public` `static` `void` `main(String[] args)``    ``{``        ``int` `arr[] = { ``1``, ``2``, ``3` `};``        ``System.out.println(countXorPair(arr, arr.length));``    ``}``}`

Python 3

 `# Python 3 program to count``# pairs in array whose XOR is odd` `# A function will``# return number of pair``# whose XOR is odd``def` `countXorPair(arr, n):` `    ``# To store count of XOR pair``    ``count ``=` `0` `    ``for` `i ``in` `range``(n):``        ``for` `j ``in` `range``(i ``+` `1``, n):` `            ``# If XOR is odd increase count``            ``if` `((arr[i] ^ arr[j]) ``%` `2` `=``=` `1``):``                ``count ``+``=` `1` `    ``# Return count``    ``return` `count` `# Driver Code``if` `__name__ ``=``=` `"__main__"``:``    ``arr``=` `[ ``1``, ``2``, ``3` `]``    ``n ``=` `len``(arr)``    ``print``(countXorPair(arr, n))` `# This code is contributed``# by ChitraNayal`

C#

 `// C# program to count pairs in``// array whose XOR is odd``using` `System;` `public` `class` `CountXor {``    ` `    ``// A function will return number of pair``    ``// whose XOR is odd``    ``static` `int` `countXorPair(``int``[] arr, ``int` `n)``    ``{``        ``// To store count of XOR pair``        ``int` `count = 0;` `        ``for` `(``int` `i = 0; i < n; i++) {``            ``for` `(``int` `j = i + 1; j < n; j++)` `                ``// If XOR is odd increase count``                ``if` `((arr[i] ^ arr[j]) % 2 == 1)``                    ``count++;``        ``}` `        ``// Return count``        ``return` `count;``    ``}` `    ``// Driver program to test countXorPair()``    ``public` `static` `void` `Main()``    ``{``        ``int``[] arr = {1, 2, 3};``        ``Console.WriteLine(countXorPair(arr, arr.Length));``    ``}``}` `// This code is contributed by vt_m.`

PHP

 ``

Javascript

 ``

Output:

`2`

Time Complexity : O(n*n)
Efficient Approach: We can observe that:

```odd ^ odd = even
odd ^ even = odd
even ^ odd = odd
even ^ even = even```

Therefore total pairs in array whose XOR is odd will be equal to count of odd numbers multiplied by count of even numbers.

C++

 `// C++ program to count pairs in array``// whose XOR is odd``#include ``using` `namespace` `std;` `// A function will return number of pair``// whose XOR is odd``int` `countXorPair(``int` `arr[], ``int` `n)``{``    ``// To store count of odd and even``    ``// numbers``    ``int` `odd = 0, even = 0;` `    ``for` `(``int` `i = 0; i < n; i++) {``        ``// Increase even if number is``        ``// even otherwise increase odd``        ``if` `(arr[i] % 2 == 0)``            ``even++;``        ``else``            ``odd++;``    ``}` `    ``// Return number of pairs``    ``return` `odd * even;``}` `// Driver program to test countXorPair()``int` `main()``{``    ``int` `arr[] = { 1, 2, 3 };``    ``int` `n = ``sizeof``(arr) / ``sizeof``(arr[0]);``    ``cout << countXorPair(arr, n);` `    ``return` `0;``}`

Java

 `// Java program to count pairs in array whose``// XOR is odd` `public` `class` `CountXor {``    ``// A function will return number of pair``    ``// whose XOR is odd``    ``static` `int` `countXorPair(``int` `arr[], ``int` `n)``    ``{``        ``// To store count of odd and even numbers``        ``int` `odd = ``0``, even = ``0``;` `        ``for` `(``int` `i = ``0``; i < n; i++) {``            ``// Increase even if number is``            ``// even otherwise increase odd``            ``if` `(arr[i] % ``2` `== ``0``)``                ``even++;``            ``else``                ``odd++;``        ``}` `        ``// Return number of pairs``        ``return` `odd * even;``    ``}` `    ``// Driver program to test countXorPair()``    ``public` `static` `void` `main(String[] args)``    ``{``        ``int` `arr[] = { ``1``, ``2``, ``3` `};``        ``System.out.println(countXorPair(arr, arr.length));``    ``}``}`

Python 3

 `# Python 3 program to count``# pairs in array whose XOR is odd` `# A function will``# return number of pair``# whose XOR is odd``def` `countXorPair(arr, n):` `    ``# To store count of``    ``# odd and even numbers``    ``odd ``=` `0``    ``even ``=` `0` `    ``for` `i ``in` `range``(n):``        ` `        ``# Increase even if number is``        ``# even otherwise increase odd``        ``if` `arr[i] ``%` `2` `=``=` `0``:``            ``even ``+``=` `1``        ``else``:``            ``odd ``+``=` `1` `    ``# Return number of pairs``    ``return` `odd ``*` `even` `# Driver Code``if` `__name__ ``=``=` `"__main__"``:``    ``arr ``=` `[ ``1``, ``2``, ``3` `]``    ``n ``=` `len``(arr)``    ``print``(countXorPair(arr, n))` `# This code is contributed``# by ChitraNayal`

C#

 `// C# program to count pairs in``// array whose XOR is odd``using` `System;` `public` `class` `CountXor {``    ` `    ``// A function will return number of pair``    ``// whose XOR is odd``    ``static` `int` `countXorPair(``int``[] arr, ``int` `n)``    ``{``        ``// To store count of odd and even numbers``        ``int` `odd = 0, even = 0;` `        ``for` `(``int` `i = 0; i < n; i++) {``            ` `            ``// Increase even if number is``            ``// even otherwise increase odd``            ``if` `(arr[i] % 2 == 0)``                ``even++;``            ``else``                ``odd++;``        ``}` `        ``// Return number of pairs``        ``return` `odd * even;``    ``}` `    ``// Driver program to test countXorPair()``    ``public` `static` `void` `Main()``    ``{``        ``int``[] arr = {1, 2, 3};``        ``Console.WriteLine(countXorPair(arr, arr.Length));``    ``}``}` `// This code is contributed by vt_m.`

PHP

 ``

Javascript

 ``

Output :

`2`

Time Complexity : O(n)
This article is contributed by nuclode. 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.