# 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 :2Explanation:

(arr[0] + arr[1]) * (arr[0] – arr[1]) = 0

(arr[3] + arr[4]) * (arr[3] – arr[4]) = 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 <bits/stdc++.h>` `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[0]);` ` ` `// 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` |

## Javascript

`<script>` `// Javascript program for the above approach` `// Function to count required` `// number of pairs` `function` `countPairs(arr, N)` `{` ` ` `// Stores count of pairs` ` ` `let desiredPairs = 0;` ` ` `// Initialize hash with 0` ` ` `let hash = ` `new` `Uint8Array(9100005);` ` ` `// Count frequency of each element` ` ` `for` `(let i = 0; i < N; i++) {` ` ` `hash[Math.abs(arr[i])]++;` ` ` `}` ` ` `// Calculate desired number of pairs` ` ` `for` `(let i = 0; i < 9100005; i++) {` ` ` `desiredPairs` ` ` `+= ((hash[i]) * (hash[i] - 1)) / 2;` ` ` `}` ` ` `// Print desired pairs` ` ` `document.write(desiredPairs);` `}` `// Driver Code` ` ` `// Given arr[]` ` ` `let arr = [2, -2, 1, 1];` ` ` `// Size of the array` ` ` `let N = arr.length;` ` ` `// Function Call` ` ` `countPairs(arr, N);` `// This code is contributed by Mayank Tyagi` `</script>` |

**Output:**

2

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