A Computer Science portal for geeks. It contains well written, well thought and well explained computer science and programming articles, quizzes and practice/competitive programming/company interview Questions.

Given an array **arr[]** consisting of **N** elements, the task is to minimize the array length by replacing any two coprime array elements with **1**.

**Examples:**

_Input: _arr[] = {2, 3, 5}

_ 1_Output:

Explanation:

Replace {2, 3} with 1 modifies the array to {1, 5}.

Replace {1, 5} with 1 modifies the array to {1}.

_Input: _arr[] = {6, 9, 15}

_Output: _3

_ No coprime pairs exist in the array. Therefore, no reduction possible._Explanation:

**Naive Approach:** The simplest approach is to iterate over the array and check for coprime pairs. If found replace it with 1 search for the next coprime pair and so on.

** Time Complexity:**_ O(N3 * log__N)_

** Auxiliary Space:**_ O(1)_

**Efficient Approach: **This approach is based on the fact:

1 is coprime with every number

The idea is to find if there is **any co-prime pair** present in the array or not. If found, then all the array elements can be reduced to 1 based on the above fact. Hence, if any co-prime pair is found, then, the required answer will be 1, else, the answer will be the initial size of the array.

Illustration:

For arr[] = {2, 4, 6, 8, 9}

Here, as there exists a coprime pair {2, 9}, replacing them by 1 modifies the array to {1, 4, 6, 8}.

Since 1 is coprime with every number, the array can be reduced further in following steps:

{1, 4, 6, 8} -> {1, 6, 8} -> {1, 8} -> {1}

Hence, the array can be reduced to size 1.

Below is the implementation of the above approach:

- C++

`// C++ Program for the above approach`

`#include <bits/stdc++.h>`

`**using**`

`**namespace**`

`std;`

`// Function to find the final array`

`// length by replacing coprime pair with 1`

`**bool**`

`hasCoprimePair(vector<``**int**``>& arr,`

`**int**`

`n)`

`{`

`// Iterate over all pairs of element`

`**for**`

`(``**int**`

`i = 0; i < n - 1; i++) {`

`**for**`

`(``**int**`

`j = i + 1; j < n; j++) {`

`// Check if gcd is 1`

`**if**`

`(__gcd(arr[i], arr[j]) == 1) {`

`**return**`

`**true**``;`

`}`

`}`

`}`

`// If no coprime pair`

`// found return false`

`**return**`

`**false**``;`

`}`

`// Driver code`

`**int**`

`main()`

`{`

`**int**`

`n = 3;`

`vector<``**int**``> arr = { 6, 9, 15 };`

`// Check if atleast one coprime`

`// pair exists in the array`

`**if**`

`(hasCoprimePair(arr, n)) {`

`cout << 1 << endl;`

`}`

`// If no such pair exists`

`**else**`

`{`

`cout << n << endl;`

`}`

`}`

**Output:**

`3`

**_Time Complexity: _***O(N2 * log N)*

** Auxiliary Space:**_ O(1)_

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.

A Computer Science portal for geeks. It contains well written, well thought and well explained computer science and programming articles, quizzes and practice/competitive programming/company interview Questions.