Minimum insertions to make a Coprime array (original) (raw)
Last Updated : 10 Oct, 2022
Given an array of N elements, find the minimum number of insertions to convert the given array into a co-prime array. Print the resultant array also.
Co-prime Array : An array in which every pair of adjacent elements are co-primes. i.e, gcd(a, b) = 1 .
Examples :
Input : A[] = {2, 7, 28}
Output : 1
Explanation :
Here, 1st pair = {2, 7} are co-primes( gcd(2, 7) = 1).
2nd pair = {7, 28} are not co-primes, insert 9
between them. gcd(7, 9) = 1 and gcd(9, 28) = 1.Input : A[] = {5, 10, 20}
Output : 2
Explanation :
Here, there is no pair which are co-primes.
Insert 7 between (5, 10) and 1 between (10, 20).
Observe that to make a pair to become co-primes we have to insert a number which makes the newly formed pairs co-primes. So, we have to check every adjacent pair for their co-primality and insert a number if required. Now, what is the number that should be inserted? Let us take two numbers a and b. If any of a or b is 1, then GCD(a, b) = 1. So, we can insert ONE(1) at every pair. For efficiency we use euler's gcd function .
Below is the implementation of the above approach:
C++ `
// CPP program for minimum insertions to // make a Co-prime Array. #include <bits/stdc++.h> using namespace std;
void printResult(int arr[], int n)
{
// Counting adjacent pairs that are not
// co-prime.
int count = 0;
for (int i = 1; i < n; i++)
if (__gcd(arr[i], arr[i - 1]) != 1)
count++;
cout << count << endl; // No.of insertions
cout << arr[0] << " ";
for (int i = 1; i < n; i++)
{
// If pair is not a co-prime insert 1.
if (__gcd(arr[i], arr[i - 1]) != 1)
cout << 1 << " ";
cout << arr[i] << " ";
}}
// Driver Function int main() { int A[] = { 5, 10, 20 }; int n = sizeof(A) / sizeof(A[0]); printResult(A, n); return 0; }
Java
//Java program for minimum insertions // to make a Co-prime Array. import java.io.*;
class GFG {
// Recursive function to return
// gcd of a and b
static int gcd(int a, int b)
{
// Everything divides 0
if (a == 0 || b == 0)
return 0;
// base case
if (a == b)
return a;
// a is greater
if (a > b)
return gcd(a-b, b);
return gcd(a, b-a);
}
static void printResult(int arr[], int n)
{
// Counting adjacent pairs that are not
// co-prime.
int count = 0;
for (int i = 1; i < n; i++)
if (gcd(arr[i], arr[i - 1]) != 1)
count++;
// No.of insertions
System.out.println(count );
System.out.print (arr[0] + " ");
for (int i = 1; i < n; i++)
{
// If pair is not a co-prime insert 1.
if (gcd(arr[i], arr[i - 1]) != 1)
System.out.print( 1 + " ");
System.out.print(arr[i] + " ");
}
}
// Driver Function
public static void main(String args[])
{
int A[] = { 5, 10, 20 };
int n = A.length;
printResult(A, n);
}}
/This code is contributed by Nikita Tiwari./
Python3
Python3 code for minimum insertions
to make a Co-prime Array.
from fractions import gcd
def printResult(arr, n):
# Counting adjacent pairs that
# are not co-prime.
count = 0
for i in range(1,n):
if (gcd(arr[i], arr[i - 1]) != 1):
count+=1
print(count) # No.of insertions
print( arr[0], end = " ")
for i in range(1,n):
# If pair is not a co-prime insert 1.
if (gcd(arr[i], arr[i - 1]) != 1):
print(1, end = " ")
print(arr[i] , end = " ")
Driver Code
A = [ 5, 10, 20 ] n = len(A) printResult(A, n)
This code is contributed by "Sharad_Bhardwaj".
C#
// C# program for minimum insertions // to make a Co-prime Array. using System;
class GFG {
// Recursive function to return
// gcd of a and b
static int gcd(int a, int b)
{
// Everything divides 0
if (a == 0 || b == 0)
return 0;
// base case
if (a == b)
return a;
// a is greater
if (a > b)
return gcd(a - b, b);
return gcd(a, b - a);
}
static void printResult(int[] arr, int n)
{
// Counting adjacent pairs that
// are not co-prime.
int count = 0;
for (int i = 1; i < n; i++)
if (gcd(arr[i], arr[i - 1]) != 1)
count++;
// No.of insertions
Console.WriteLine(count);
Console.Write(arr[0] + " ");
for (int i = 1; i < n; i++) {
// If pair is not a co-prime insert 1.
if (gcd(arr[i], arr[i - 1]) != 1)
Console.Write(1 + " ");
Console.Write(arr[i] + " ");
}
}
// Driver Function
public static void Main()
{
int[] A = { 5, 10, 20 };
int n = A.Length;
printResult(A, n);
}}
/This code is contributed by vt_m./
PHP
JavaScript
`
Time Complexity: O(n log(Ai)), for using __gcd function
Auxiliary Space: O(1)