Count pairs with Odd XOR

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++

filter_none

edit
close

play_arrow

link
brightness_4
code

// C++ program to count pairs in array
// whose XOR is odd
#include <iostream>
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;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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));
    }
}

chevron_right


Python 3

filter_none

edit
close

play_arrow

link
brightness_4
code

# 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

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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.

chevron_right


PHP

filter_none

edit
close

play_arrow

link
brightness_4
code

<?php
// PHP program to count
// pairs in array
// whose XOR is odd
  
// A function will
// return number of pair
// whose XOR is odd
function countXorPair($arr,$n)
{
  
    // To store count 
    // of XOR pair
    $count = 0;
  
    for ($i = 0; $i < $n; $i++)
    {
        for ($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 Code
    $arr = array(1, 2, 3);
    $n = count($arr);
    echo countXorPair($arr, $n);
  
// This code is contributed by anuj_67.
?>

chevron_right



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++

filter_none

edit
close

play_arrow

link
brightness_4
code

// C++ program to count pairs in array
// whose XOR is odd
#include <iostream>
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;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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));
    }
}

chevron_right


Python 3

filter_none

edit
close

play_arrow

link
brightness_4
code

# 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

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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.

chevron_right


PHP

filter_none

edit
close

play_arrow

link
brightness_4
code

<?php
// PHP program to count pairs in array
// whose XOR is odd
  
// A function will return number of pair
// whose XOR is odd
  
function countXorPair($arr, $n)
{
    // To store count of odd 
    // and even numbers
    $odd = 0;
    $even = 0;
  
    for ($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 Code
$arr = array( 1, 2, 3 );
$n = sizeof($arr);
echo countXorPair($arr, $n);
  
// This code is contributed by Ajit_m
?>

chevron_right



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.

Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.



My Personal Notes arrow_drop_up

Improved By : vt_m, jit_t, Ita_c