最少插入以制作一个 Co-prime 数组
给定一个包含 N 个元素的数组,找到将给定数组转换为互素数组的最小插入次数。也打印结果数组。
互素数组:每对相邻元素互素的数组。 IE, .
例子 :
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).
请注意,要使一对成为互质,我们必须插入一个数字,使新形成的对成为互质。因此,我们必须检查每个相邻对的共素性,并在需要时插入一个数字。现在,应该插入的数字是多少?让我们取两个数字 a 和 b。如果 a 或 b 中的任何一个为 1,则 GCD(a, b) = 1。因此,我们可以在每一对插入 ONE(1)。为了提高效率,我们使用欧拉的 gcd函数。
下面是上述方法的实现:
C++
// CPP program for minimum insertions to
// make a Co-prime Array.
#include
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
$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
输出:
2
5 1 10 1 20
时间复杂度: O(n)。