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, .
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
<?php // PHP program for minimum // insertions to make a // Co-prime Array. // Recursive function to // return gcd of a and b function gcd( $a , $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 ); } function printResult( $arr , $n ) { // Counting adjacent pairs // that are not co-prime. $count = 0; for ( $i = 1; $i < $n ; $i ++) if (gcd( $arr [ $i ], $arr [ $i - 1]) != 1) $count ++; // No.of insertions echo $count , "\n" ; echo $arr [0] , " " ; for ( $i = 1; $i < $n ; $i ++) { // If pair is not a // co-prime insert 1. if (gcd( $arr [ $i ], $arr [ $i - 1]) != 1) echo 1 , " " ; echo $arr [ $i ] , " " ; } } // Driver Code $A = array (5, 10, 20); $n = sizeof( $A ); printResult( $A , $n ); // This code is contributed // by ajit ?> |
Javascript
<script> // Javascript program for minimum insertions // to make a Co-prime Array. // Recursive function to return // gcd of a and b function gcd(a, 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); } function printResult(arr, n) { // Counting adjacent pairs that // are not co-prime. let count = 0; for (let i = 1; i < n; i++) if (gcd(arr[i], arr[i - 1]) != 1) count++; // No.of insertions document.write(count + "</br>" ); document.write(arr[0] + " " ); for (let i = 1; i < n; i++) { // If pair is not a co-prime insert 1. if (gcd(arr[i], arr[i - 1]) != 1) document.write(1 + " " ); document.write(arr[i] + " " ); } } // Driver code let A = [ 5, 10, 20 ]; let n = A.length; printResult(A, n); // This code is contributed by suresh07 </script> |
2 5 1 10 1 20
Time Complexity: O(n log(Ai)), for using __gcd function
Auxiliary Space: O(1)
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 neveropen!