# Count pairs from an array having product of their sum and difference equal to 0

Given an array arr[] of size N, the task is to count possible pairs of array elements (arr[i], arr[j]) such that (arr[i] + arr[j]) * (arr[i] – arr[j]) is 0.

Examples:

Input: arr[] = {2, -2, 1, 1}
Output : 2
Explanation:
(arr + arr) * (arr – arr) = 0
(arr + arr) * (arr – arr) = 0

Input: arr[] = {5, 9, -9, -9}
Output : 3

Approach: It can be observed that the equation (arr[i] + arr[j]) * (arr[i] – arr[j]) = 0 can be reduced to arr[i]2 = arr[j]2. Therefore, the task reduces to counting pairs having absolute value equal. Follow the steps below to solve the problem:

• Initialize an array hash[] to store the frequency of the absolute value of each array element.
• Calculate the count of pairs by adding (hash[x] * (hash[x] – 1))/ 2 for every array distinct absolute values.

Below is the implementation of the above approach:

## C++14

 `// C++ program for the above approach` `#include ` `using` `namespace` `std;`   `#define MAXN 100005`   `// Function to count required` `// number of pairs` `int` `countPairs(``int` `arr[], ``int` `N)` `{` `    ``// Stores count of pairs` `    ``int` `desiredPairs = 0;`   `    ``// Initialize hash with 0` `    ``int` `hash[MAXN] = { 0 };`   `    ``// Count frequency of each element` `    ``for` `(``int` `i = 0; i < N; i++) {` `        ``hash[``abs``(arr[i])]++;` `    ``}`   `    ``// Calculate desired number of pairs` `    ``for` `(``int` `i = 0; i < MAXN; i++) {` `        ``desiredPairs` `            ``+= ((hash[i]) * (hash[i] - 1)) / 2;` `    ``}`   `    ``// Print desired pairs` `    ``cout << desiredPairs;` `}`   `// Driver Code` `int` `main()` `{` `    ``// Given arr[]` `    ``int` `arr[] = { 2, -2, 1, 1 };`   `    ``// Size of the array` `    ``int` `N = ``sizeof``(arr) / ``sizeof``(arr);`   `    ``// Function Call` `    ``countPairs(arr, N);`   `    ``return` `0;` `}`

## Java

 `// Java program for the above approach` `import` `java.io.*;` `import` `java.util.Arrays; `   `class` `GFG{` `  `  `static` `int` `MAXN = ``100005``;`   `// Function to count required` `// number of pairs` `static` `void` `countPairs(``int` `arr[], ``int` `N)` `{` `    `  `    ``// Stores count of pairs` `    ``int` `desiredPairs = ``0``;`   `    ``// Initialize hash with 0` `    ``int` `hash[] = ``new` `int``[MAXN];` `    ``Arrays.fill(hash, ``0``);`   `    ``// Count frequency of each element` `    ``for``(``int` `i = ``0``; i < N; i++) ` `    ``{` `        ``hash[Math.abs(arr[i])]++;` `    ``}`   `    ``// Calculate desired number of pairs` `    ``for``(``int` `i = ``0``; i < MAXN; i++)` `    ``{` `        ``desiredPairs += ((hash[i]) * ` `                         ``(hash[i] - ``1``)) / ``2``;` `    ``}`   `    ``// Print desired pairs` `    ``System.out.print(desiredPairs);` `}   ` `  `  `// Driver Code` `public` `static` `void` `main (String[] args) ` `{` `    `  `    ``// Given arr[]` `    ``int` `arr[] = { ``2``, -``2``, ``1``, ``1` `};`   `    ``// Size of the array` `    ``int` `N = arr.length;`   `    ``// Function call` `    ``countPairs(arr, N);` `}` `}`   `// This code is contributed by code_hunt`

## Python3

 `# Python3 program for ` `# the above approach` `MAXN ``=` `100005`   `# Function to count required` `# number of pairs` `def` `countPairs(arr, N):`   `    ``# Stores count of pairs` `    ``desiredPairs ``=` `0`   `    ``# Initialize hash with 0` `    ``hash` `=` `[``0``] ``*` `MAXN`   `    ``# Count frequency of ` `    ``# each element` `    ``for` `i ``in` `range``(N):` `        ``hash``[``abs``(arr[i])] ``+``=` `1` `   `  `    ``# Calculate desired number ` `    ``# of pairs` `    ``for` `i ``in` `range``(MAXN):` `        ``desiredPairs ``+``=` `((``hash``[i]) ``*` `                         ``(``hash``[i] ``-` `1``)) ``/``/` `2` `    `  `    ``# Print desired pairs` `    ``print` `(desiredPairs)`   `# Driver Code` `if` `__name__ ``=``=` `"__main__"``:` `  `  `    ``# Given arr[]` `    ``arr ``=` `[``2``, ``-``2``, ``1``, ``1``]`   `    ``# Size of the array` `    ``N ``=` `len``(arr)`   `    ``# Function Call` `    ``countPairs(arr, N)`   `# This code is contributed by Chitranayal`

## C#

 `// C# program for the above approach` `using` `System;`   `class` `GFG{` `  `  `static` `int` `MAXN = 100005;`   `// Function to count required` `// number of pairs` `static` `void` `countPairs(``int` `[]arr, ``int` `N)` `{` `    `  `    ``// Stores count of pairs` `    ``int` `desiredPairs = 0;`   `    ``// Initialize hash with 0` `    ``int` `[]hash = ``new` `int``[MAXN];`   `    ``// Count frequency of each element` `    ``for``(``int` `i = 0; i < N; i++) ` `    ``{` `        ``hash[Math.Abs(arr[i])]++;` `    ``}`   `    ``// Calculate desired number of pairs` `    ``for``(``int` `i = 0; i < MAXN; i++)` `    ``{` `        ``desiredPairs += ((hash[i]) * ` `                         ``(hash[i] - 1)) / 2;` `    ``}`   `    ``// Print desired pairs` `    ``Console.Write(desiredPairs);` `}   ` `  `  `// Driver Code` `public` `static` `void` `Main(String[] args) ` `{` `    `  `    ``// Given []arr` `    ``int` `[]arr = { 2, -2, 1, 1 };`   `    ``// Size of the array` `    ``int` `N = arr.Length;`   `    ``// Function call` `    ``countPairs(arr, N);` `}` `}`   `// This code is contributed by Amit Katiyar`

Output:

```2

```

Time Complexity: O(N)
Auxiliary Space: O(N)

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.

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.