Check if all the pairs of an array are coprime with each other
Last Updated :
19 Dec, 2022
Given an array arr[], the task is to check if all the pairs of an array are coprime to each other. All pairs of an array are coprime when GCD(arr[i], arr[j]) = 1 holds for every pair (i, j), such that 1? i < j ? N.
Examples:
Input: arr[] = {1, 3, 8}
Output: Yes
Explanation:
Here, GCD(arr[0], arr[1]) = GCD(arr[0], arr[2]) = GCD(arr[1], arr[2]) = 1
Hence, all the pairs are coprime to each other.
Input: arr[] = {6, 67, 24, 1}
Output: No
Naive Approach: A simple solution is to iterate over every pair (A[i], A[j]) from the given array and check if the gcd(A[i], A[j]) = 1 or not. Therefore, the only positive integer(factor) that divides both of them is 1.
Below is the implementation of the naive approach:
C++
#include <bits/stdc++.h>
using namespace std;
bool allCoprime( int A[], int n)
{
bool all_coprime = true ;
for ( int i = 0; i < n; i++) {
for ( int j = i + 1; j < n; j++) {
if (__gcd(A[i], A[j]) != 1) {
all_coprime = false ;
break ;
}
}
}
return all_coprime;
}
int main()
{
int A[] = { 3, 5, 11, 7, 19 };
int arr_size = sizeof (A) / sizeof (A[0]);
if (allCoprime(A, arr_size)) {
cout << "Yes" ;
}
else {
cout << "No" ;
}
return 0;
}
|
Java
import java.util.*;
import java.lang.*;
class GFG{
static boolean allCoprime( int A[], int n)
{
boolean all_coprime = true ;
for ( int i = 0 ; i < n; i++)
{
for ( int j = i + 1 ; j < n; j++)
{
if (gcd(A[i], A[j]) != 1 )
{
all_coprime = false ;
break ;
}
}
}
return all_coprime;
}
static int gcd( int a, int b)
{
if (b == 0 )
return a;
return gcd(b, a % b);
}
public static void main (String[] args)
{
int A[] = { 3 , 5 , 11 , 7 , 19 };
int arr_size = A.length;
if (allCoprime(A, arr_size))
{
System.out.println( "Yes" );
}
else
{
System.out.println( "No" );
}
}
}
|
Python3
def gcd(a, b):
if (b = = 0 ):
return a
else :
return gcd(b, a % b)
def allCoprime(A, n):
all_coprime = True
for i in range (n):
for j in range (i + 1 , n):
if gcd(A[i], A[j]) ! = 1 :
all_coprime = False ;
break
return all_coprime
if __name__ = = "__main__" :
A = [ 3 , 5 , 11 , 7 , 19 ]
arr_size = len (A)
if (allCoprime(A, arr_size)):
print ( 'Yes' )
else :
print ( 'No' )
|
C#
using System;
class GFG{
static bool allCoprime( int []A,
int n)
{
bool all_coprime = true ;
for ( int i = 0; i < n; i++)
{
for ( int j = i + 1; j < n; j++)
{
if (gcd(A[i], A[j]) != 1)
{
all_coprime = false ;
break ;
}
}
}
return all_coprime;
}
static int gcd( int a, int b)
{
if (b == 0)
return a;
return gcd(b, a % b);
}
public static void Main(String[] args)
{
int []A = {3, 5, 11, 7, 19};
int arr_size = A.Length;
if (allCoprime(A, arr_size))
{
Console.WriteLine( "Yes" );
}
else
{
Console.WriteLine( "No" );
}
}
}
|
Javascript
<script>
function gcd(a, b) {
if (!b) {
return a;
}
return gcd(b, a % b);
}
function allCoprime( A, n)
{
var all_coprime = true ;
for ( var i = 0; i < n; i++) {
for ( var j = i + 1; j < n; j++) {
if (gcd(A[i], A[j]) != 1) {
all_coprime = false ;
break ;
}
}
}
return all_coprime;
}
var A = [ 3, 5, 11, 7, 19 ];
var arr_size = A.length;
if (allCoprime(A, arr_size)) {
console.log( "Yes" );
}
else {
console.log( "No" );
}
</script>
|
Time Complexity: O(N2 logN)
Auxiliary Space: O(1)
Efficient Approach: The key observation in the problem is that two numbers are said to be co-prime if only positive integer(factor) that divides both of them is 1. So, we can store the factors of each element of the array in the container(set, array, etc.) including this element, and check if this factor is already present or not.
Illustration:
For the array arr[] = {6, 5, 10, 3}
Since the pairs (6, 10), (6, 3) and (5, 10) have common factors, all pairs from the array are not coprime with each other.
Below is the implementation of the above approach:
C++
#include <bits/stdc++.h>
using namespace std;
bool findFactor( int value,
unordered_set< int >& factors)
{
factors.insert(value);
for ( int i = 2; i * i <= value; i++) {
if (value % i == 0) {
if (value / i == i) {
if (factors.find(i)
!= factors.end()) {
return true ;
}
else {
factors.insert(i);
}
}
else {
if (factors.find(i) != factors.end()
|| factors.find(value / i)
!= factors.end()) {
return true ;
}
else {
factors.insert(i);
factors.insert(value / i);
}
}
}
}
return false ;
}
bool allCoprime( int A[], int n)
{
bool all_coprime = true ;
unordered_set< int > factors;
for ( int i = 0; i < n; i++) {
if (A[i] == 1)
continue ;
if (findFactor(A[i], factors)) {
all_coprime = false ;
break ;
}
}
return all_coprime;
}
int main()
{
int A[] = { 3, 5, 11, 7, 19 };
int arr_size = sizeof (A) / sizeof (A[0]);
if (allCoprime(A, arr_size)) {
cout << "Yes" ;
}
else {
cout << "No" ;
}
return 0;
}
|
Java
import java.util.*;
class GFG{
static boolean findFactor( int value,
HashSet<Integer> factors)
{
factors.add(value);
for ( int i = 2 ; i * i <= value; i++)
{
if (value % i == 0 )
{
if (value / i == i)
{
if (factors.contains(i))
{
return true ;
}
else
{
factors.add(i);
}
}
else
{
if (factors.contains(i) ||
factors.contains(value / i))
{
return true ;
}
else
{
factors.add(i);
factors.add(value / i);
}
}
}
}
return false ;
}
static boolean allCoprime( int A[], int n)
{
boolean all_coprime = true ;
HashSet<Integer> factors =
new HashSet<Integer>();
for ( int i = 0 ; i < n; i++)
{
if (A[i] == 1 )
continue ;
if (findFactor(A[i], factors))
{
all_coprime = false ;
break ;
}
}
return all_coprime;
}
public static void main(String[] args)
{
int A[] = { 3 , 5 , 11 , 7 , 19 };
int arr_size = A.length;
if (allCoprime(A, arr_size))
{
System.out.print( "Yes" );
}
else
{
System.out.print( "No" );
}
}
}
|
Python3
def findFactor(value, factors):
factors.add(value)
i = 2
while (i * i < = value):
if value % i = = 0 :
if value / / i = = i:
if i in factors:
return bool ( True )
else :
factors.add(i)
else :
if (i in factors) or
((value / / i) in factors):
return bool ( True )
else :
factors.add(i)
factors.add(value / / i)
i + = 1
return bool ( False )
def allCoprime(A, n):
all_coprime = bool ( True )
factors = set ()
for i in range (n):
if A[i] = = 1 :
continue
if findFactor(A[i], factors):
all_coprime = bool ( False )
break
return bool (all_coprime)
A = [ 3 , 5 , 11 , 7 , 19 ]
arr_size = len (A)
if (allCoprime(A, arr_size)):
print ( "Yes" )
else :
print ( "No" )
|
C#
using System;
using System.Collections.Generic;
class GFG{
static bool findFactor( int value,
HashSet< int > factors)
{
factors.Add(value);
for ( int i = 2; i * i <= value; i++)
{
if (value % i == 0)
{
if (value / i == i)
{
if (factors.Contains(i))
{
return true ;
}
else
{
factors.Add(i);
}
}
else
{
if (factors.Contains(i) ||
factors.Contains(value / i))
{
return true ;
}
else
{
factors.Add(i);
factors.Add(value / i);
}
}
}
}
return false ;
}
static bool allCoprime( int []A, int n)
{
bool all_coprime = true ;
HashSet< int > factors = new HashSet< int >();
for ( int i = 0; i < n; i++)
{
if (A[i] == 1)
continue ;
if (findFactor(A[i], factors))
{
all_coprime = false ;
break ;
}
}
return all_coprime;
}
public static void Main(String[] args)
{
int []A = { 3, 5, 11, 7, 19 };
int arr_size = A.Length;
if (allCoprime(A, arr_size))
{
Console.Write( "Yes" );
}
else
{
Console.Write( "No" );
}
}
}
|
Javascript
function findFactor(value, factors)
{
factors.add(value);
for ( var i = 2; i * i <= value; i++) {
if (value % i == 0) {
if (value == i * i) {
if (factors.has(i)) {
return true ;
}
else {
factors.add(i);
}
}
else {
if (factors.has(i)
|| factors.has(Math.floor(value / i))){
return true ;
}
else {
factors.add(i);
factors.add(Math.floor(value / i));
}
}
}
}
return false ;
}
function allCoprime(A, n)
{
let all_coprime = true ;
let factors = new Set();
for ( var i = 0; i < n; i++) {
if (A[i] == 1)
continue ;
if (findFactor(A[i], factors)) {
all_coprime = false ;
break ;
}
}
return all_coprime;
}
let A = [ 3, 5, 11, 7, 19 ];
let arr_size = A.length
if (allCoprime(A, arr_size)) {
console.log( "Yes" );
}
else {
console.log( "No" );
}
|
Time Complexity: O(N3/2)
Auxiliary Space: O(N)
Like Article
Suggest improvement
Share your thoughts in the comments
Please Login to comment...