给定一个由N个正整数组成的数组A [] ,任务是检查所有数组元素是否都是成对互质的,即对于所有对(A i ,A j ),使得1 <= i
例子:
Input : A[] = {2, 3, 5}
Output : Yes
Explanation : All the pairs, (2, 3), (3, 5), (2, 5) are pairwise co-prime.
Input : A[] = {5, 10}
Output : No
Explanation : GCD(5, 10)=5 so they are not co-prime.
天真的方法:解决问题的最简单方法是从给定数组生成所有可能的对,并针对每个对检查其是否互质。如果发现任何一对都不是互质的,则打印“ No ”。否则,打印“是”。
时间复杂度: O(N 2 )
辅助空间: O(1)
高效的方法:可以基于以下观察来优化上述方法:
If any two numbers have a common prime factor, then their GCD can never be 1.
这也可以解释为:
The LCM of the array must be equal to the product of the elements in the array.
因此,解决方案归结为计算给定数组的LCM,并检查它是否等于所有数组元素的乘积。
下面是上述方法的实现:
C++
// C++ Program for the above approach
#include
using namespace std;
#define ll long long int
// Function to calculate GCD
ll GCD(ll a, ll b)
{
if (a == 0)
return b;
return GCD(b % a, a);
}
// Function to calculate LCM
ll LCM(ll a, ll b)
{
return (a * b)
/ GCD(a, b);
}
// Function to check if all elements
// in the array are pairwise coprime
void checkPairwiseCoPrime(int A[], int n)
{
// Initialze variables
ll prod = 1;
ll lcm = 1;
// Itertae over the array
for (int i = 0; i < n; i++) {
// Calculate product of
// array elements
prod *= A[i];
// Calculate LCM of
// array elements
lcm = LCM(A[i], lcm);
}
// If the product of array elements
// is equal to LCM of the array
if (prod == lcm)
cout << "Yes" << endl;
else
cout << "No" << endl;
}
// Driver Code
int main()
{
int A[] = { 2, 3, 5 };
int n = sizeof(A) / sizeof(A[0]);
// Function call
checkPairwiseCoPrime(A, n);
}
Java
// Java program for the above approach
import java.util.*;
import java.lang.*;
class GFG{
// Function to calculate GCD
static long GCD(long a, long b)
{
if (a == 0)
return b;
return GCD(b % a, a);
}
// Function to calculate LCM
static long LCM(long a, long b)
{
return (a * b) / GCD(a, b);
}
// Function to check if all elements
// in the array are pairwise coprime
static void checkPairwiseCoPrime(int A[], int n)
{
// Initialze variables
long prod = 1;
long lcm = 1;
// Itertae over the array
for(int i = 0; i < n; i++)
{
// Calculate product of
// array elements
prod *= A[i];
// Calculate LCM of
// array elements
lcm = LCM(A[i], lcm);
}
// If the product of array elements
// is equal to LCM of the array
if (prod == lcm)
System.out.println("Yes");
else
System.out.println("No");
}
// Driver Code
public static void main (String[] args)
{
int A[] = { 2, 3, 5 };
int n = A.length;
// Function call
checkPairwiseCoPrime(A, n);
}
}
// This code is contributed by offbeat
Python3
# Python3 program for the above approach
# Function to calculate GCD
def GCD(a, b):
if (a == 0):
return b
return GCD(b % a, a)
# Function to calculate LCM
def LCM(a, b):
return (a * b) // GCD(a, b)
# Function to check if aelements
# in the array are pairwise coprime
def checkPairwiseCoPrime(A, n):
# Initialze variables
prod = 1
lcm = 1
# Itertae over the array
for i in range(n):
# Calculate product of
# array elements
prod *= A[i]
# Calculate LCM of
# array elements
lcm = LCM(A[i], lcm)
# If the product of array elements
# is equal to LCM of the array
if (prod == lcm):
print("Yes")
else:
print("No")
# Driver Code
if __name__ == '__main__':
A = [ 2, 3, 5 ]
n = len(A)
# Function call
checkPairwiseCoPrime(A, n)
# This code is contributed by mohit kumar 29
C#
// C# program for
// the above approach
using System;
using System.Collections.Generic;
class GFG{
// Function to calculate GCD
static long GCD(long a,
long b)
{
if (a == 0)
return b;
return GCD(b % a, a);
}
// Function to calculate LCM
static long LCM(long a,
long b)
{
return (a * b) / GCD(a, b);
}
// Function to check if all elements
// in the array are pairwise coprime
static void checkPairwiseCoPrime(int []A,
int n)
{
// Initialze variables
long prod = 1;
long lcm = 1;
// Itertae over the array
for(int i = 0; i < n; i++)
{
// Calculate product of
// array elements
prod *= A[i];
// Calculate LCM of
// array elements
lcm = LCM(A[i], lcm);
}
// If the product of array elements
// is equal to LCM of the array
if (prod == lcm)
Console.WriteLine("Yes");
else
Console.WriteLine("No");
}
// Driver Code
public static void Main(String[] args)
{
int []A = {2, 3, 5};
int n = A.Length;
// Function call
checkPairwiseCoPrime(A, n);
}
}
// This code is contributed by Rajput-Ji
Yes
时间复杂度: O(N log(min(A [i])))
辅助空间: O(1)