Open In App

Count pairs with Odd XOR

Improve
Improve
Like Article
Like
Save
Share
Report

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
Recommended Practice

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.

Implementation:

C++




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


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




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


Javascript




<script>
    // Javascript 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
        let count = 0;
    
        for (let i = 0; i < n; i++) {
            for (let j = i + 1; j < n; j++)
    
                // If XOR is odd increase count
                if ((arr[i] ^ arr[j]) % 2 == 1)
                    count++;
        }
    
        // Return count
        return count;
    }
      
    let arr = [1, 2, 3];
      document.write(countXorPair(arr, arr.length));
      
</script>


Output

2

Time Complexity : O(n*n)
Space Complexity – O(1)

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.

Implementation:

C++




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


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




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


Javascript




<script>
// Javascript 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
        let odd = 0, even = 0;
    
        for (let 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()
    let arr=[ 1, 2, 3 ];
    document.write(countXorPair(arr, arr.length));
      
    // This code is contributed by rag2127 
</script>


Output

2

Time Complexity : O(n)
Space Complexity : O(1)

 



Last Updated : 19 Sep, 2023
Like Article
Save Article
Previous
Next
Share your thoughts in the comments
Similar Reads