# Pair with given product | Set 1 (Find if any pair exists)

Given an array of distinct elements and a number x, find if there is a pair with product equal to x.

Examples :

```Input : arr[] = {10, 20, 9, 40};
int x = 400;
Output : Yes

Input : arr[] = {10, 20, 9, 40};
int x = 190;
Output : No

Input : arr[] = {-10, 20, 9, -40};
int x = 400;
Output : Yes

Input : arr[] = {-10, 20, 9, 40};
int x = -400;
Output : Yes

Input : arr[] = {0, 20, 9, 40};
int x = 0;
Output : Yes
```

## Recommended: Please solve it on “PRACTICE ” first, before moving on to the solution.

Naive approach ( O(n2) ) is to run two loops to consider all possible pairs. For every pair, check if product is equal to x or not.

## C++

```// A simple C++ program to find if there is a pair
// with given product.
#include<bits/stdc++.h>
using namespace std;

// Returns true if there is a pair in arr[0..n-1]
// with product equal to x.
bool isProduct(int arr[], int n, int x)
{
// Consider all possible pairs and check for
// every pair.
for (int i=0; i<n-1; i++)
for (int j=i+1; i<n; i++)
if (arr[i] * arr[j] == x)
return true;

return false;
}

// Driver code
int main()
{
int arr[] = {10, 20, 9, 40};
int x = 400;
int n = sizeof(arr)/sizeof(arr[0]);
isProduct(arr, n, x)? cout << "Yesn"
: cout << "Non";
x = 190;
isProduct(arr, n, x)? cout << "Yesn"
: cout << "Non";
return 0;
}
```

## Java

```// Java program to find if there is a pair
// with given product.
class GFG
{
// Returns true if there is a pair in
// arr[0..n-1] with product equal to x.
boolean isProduct(int arr[], int n, int x)
{
for (int i=0; i<n-1; i++)
for (int j=i+1; j<n; j++)
if (arr[i]*arr[j] == x)
return true;
return false;
}

// Driver code
public static void main(String[] args)
{
GFG g = new GFG();
int arr[] = {10, 20, 9, 40};
int x = 400;
int n = arr.length;
if (g.isProduct(arr, n, x))
System.out.println("Yes");
else
System.out.println("No");

x = 190;
if (g.isProduct(arr, n, x))
System.out.println("Yes");
else
System.out.println("No");

}
}
// This code is contributed by Kamal Rawal
```

Output :
```Yes
No```

Better Solution (O(n Log n) : We sort the given array. After sorting, we traverse the array and for every element arr[i], we do binary search for x/arr[i] in the subarry on right of arr[i], i.e., in subarray arr[i+1..n-1]

Efficient Solution ( O(n) ): We can improve time complexity to O(n) using hashing. Below are steps.

1. Create an empty hash table
2. Traverse array elments and do following for every element arr[i].
• If arr[i] is 0 and x is also 0, return true, else ignore arr[i].
• If x % arr[i] is 0 and x/arr[i] exists in table, return true.
• Insert arr[i] into the hash table.
3. Return false

Below is the implementation of above idea.

## C++

```// C++ program to find if there is a pair
// with given product.
#include<bits/stdc++.h>
using namespace std;

// Returns true if there is a pair in arr[0..n-1]
// with product equal to x.
bool isProduct(int arr[], int n, int x)
{
if (n < 2)
return false;

// Create an empty set and insert first
// element into it
unordered_set<int> s;

// Traverse remaining elements
for (int i=0; i<n; i++)
{
// 0 case must be handles explicitly as
// x % 0 is undefined behaviour in C++
if (arr[i] == 0)
{
if (x == 0)
return true;
else
continue;
}

// x/arr[i] exists in hash, then we
// found a pair
if (x%arr[i] == 0)
{
if (s.find(x/arr[i]) != s.end())
return true;

// Insert arr[i]
s.insert(arr[i]);
}
}
return false;
}

// Driver code
int main()
{
int arr[] = {10, 20, 9, 40};
int x = 400;

int n = sizeof(arr)/sizeof(arr[0]);
isProduct(arr, n, x)? cout << "Yes\n"
: cout << "Non";

x = 190;
isProduct(arr, n, x)? cout << "Yes\n"
: cout << "Non";

return 0;
}
```

## Java

```// Java program if there exists a pair for given product
import java.util.HashSet;

class GFG
{
// Returns true if there is a pair in arr[0..n-1]
// with product equal to x.
static boolean isProduct(int arr[], int n, int x)
{
// Create an empty set and insert first
// element into it
HashSet<Integer> hset = new HashSet<>();

if(n < 2)
return false;

// Traverse remaining elements
for(int i = 0; i < n; i++)
{
// 0 case must be handles explicitly as
// x % 0 is undefined
if(arr[i] == 0)
{
if(x == 0)
return true;
else
continue;
}

// x/arr[i] exists in hash, then we
// found a pair
if(x % arr[i] == 0)
{
if(hset.contains(x / arr[i]))
return true;

// Insert arr[i]
}
}
return false;
}

// driver code
public static void main(String[] args)
{
int arr[] = {10, 20, 9, 40};
int x = 400;
int n = arr.length;

if(isProduct(arr, arr.length, x))
System.out.println("Yes");
else
System.out.println("No");

x = 190;

if(isProduct(arr, arr.length, x))
System.out.println("Yes");
else
System.out.println("No");
}
}

// This code is contributed by Kamal Rawal
```

Output :
```Yes
No```

In the next set, we will be discussing approach to print all pairs with product equal to 0.

# GATE CS Corner    Company Wise Coding Practice

Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.
2 Average Difficulty : 2/5.0
Based on 87 vote(s)