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}

Output:_ 1_

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

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

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.

#arrays #greedy #mathematical #searching #prime number

Minimize Array length by repeatedly replacing co-prime pairs with 1
1.90 GEEK