POTD Solutions | 30 Oct’ 23 | Sum of XOR of all pairs Last Updated : 22 Nov, 2023 Improve Improve Like Article Like Save Share Report View all POTD Solutions Welcome to the daily solutions of our PROBLEM OF THE DAY (POTD). We will discuss the entire problem step-by-step and work towards developing an optimized solution. This will not only help you brush up on your concepts of Bit Manipulation but will also help you build up problem-solving skills. POTD 30 Oct’ 2023 POTD 30th Oct Sum of XOR of all pairs Solve! Watch! POTD 30 October: Sum of XOR of all pairs Given an array of N integers, find the sum of xor of all pairs of numbers in the array arr. In other words, select all possible pairs of i and j from 0 to N-1 (i<j) and determine sum of all (arri xor arrj). Example 1: Input: arr[] = {7, 3, 5}Output: 12Explanation: All possible pairs and sum of their XOR Values: (3 ^ 5) + (7 ^ 3) + (7 ^ 5) = 6 + 4 + 2 = 12 Example 2:Input: {5, 9, 7, 6} Output: 47Explanation: All possible pairs and sum of their XOR Values: (5 ^ 9) + (5 ^ 7) + (5 ^ 6) + (9 ^ 7) + (9 ^ 6) + (7 ^ 6) = 12 + 2 + 3 + 14 + 15 + 1 = 47 Sum of XOR of all pairs using Bit Manipulation: The idea is that for every bit position i, we consider all bits which are 1 and which are 0 and store their count in two different variables. Next multiply those counts along with the power of 2 raised to that bit position i. Do this for all the bit positions of the numbers. Their sum would be our answer. For any bit position i, suppose A numbers have their ith bit unset (ith bit = 0) and B numbers have their ith bit set (ith bit = 1). Then out of all the pairs, A*B pairs will have the ith bit set in their XOR. This is because there are A*B ways to choose one number that has a 0-bit and one that has a 1-bit. These bits will therefore contribute A*B towards the total of all the XORs. The contribution towards the final sum will be A*B*pow(2,i). Do this for each bit and sum all these contributions together. Below is the implementation of the above approach: C++ class Solution { public: // Returns sum of bitwise OR // of all pairs long long int sumXOR(int arr[], int n) { // Complete the function long long int sum = 0; for (int i = 0; i < 32; i++) { // Count of zeros and ones int A = 0, B = 0; // Individual sum at each bit position long long int idsum = 0; for (int j = 0; j < n; j++) { if (arr[j] % 2 == 0) A++; else B++; arr[j] /= 2; } // calculating individual bit sum idsum = A * 1LL * B * (1LL << i); // final sum sum += idsum; } return sum; } }; Java class Solution { // Function for finding maximum and value pair public long sumXOR(int arr[], int n) { // Complete the function long sum = 0; for (int i = 0; i < 32; i++) { // Count of zeros and ones long A = 0, B = 0; // Individual sum at each bit position long idsum = 0; for (int j = 0; j < n; j++) { if (arr[j] % 2 == 0) A++; else B++; arr[j] /= 2; } // calculating individual bit sum idsum = A * B * (1 << i); // final sum sum += idsum; } return sum; } } Python3 class Solution: def sumXOR(self, arr, n): sum = 0 for i in range(0, 32): # Count of zeros and ones A = 0 B = 0 # Individual sum at each bit position idsum = 0 for j in range(0, n): if (arr[j] % 2 == 0): A = A + 1 else: B = B + 1 arr[j] = arr[j] // 2 # calculating individual bit sum idsum = A * B * (1 << i) # final sum sum = sum + idsum return sum Time Complexity: O(K * N), where K is the number of bits in the input array and N is the size of arrayAuxiliary Space: O(1) POTD 30th Oct Sum of XOR of all pairs Read Full Solution! Like Article Suggest improvement Next POTD Solutions | 21 Oct’ 23 | Sum of all divisors from 1 to n Share your thoughts in the comments Add Your Comment Please Login to comment... Similar Reads POTD Solutions | 21 Oct’ 23 | Sum of all divisors from 1 to n POTD Solutions | 31 Oct’ 23 | Move all zeroes to end of array POTD Solutions | 23 Oct’ 23 | Maximum Sum Increasing Subsequence POTD Solutions | 15 Oct' 23 | Normal BST to Balanced BST POTD Solutions | 16 Oct’ 23 | Making A Large Island POTD Solutions | 17 Oct’ 23 | Transitive Closure of a Graph POTD Solutions | 18 Oct’ 23 | Eventual Safe States POTD Solutions | 19 Oct’ 23 | Level of Nodes POTD Solutions | 20 Oct’ 23 | Form a number divisible by 3 using array digits POTD Solutions | 22 Oct’ 23 | Number of paths Like M mrityuanjay8vae Follow Article Tags : Algorithms-Bit Algorithms Bitwise-XOR GFG-POTD-Solutions Competitive Programming DSA