Maximum count of pairwise co-prime and common divisors of two given numbers

11 May, 2021
Given an array of pairs arr[] of two numbers {N, M}, the task is to find the maximum count of common divisors for each pair N and M such that every pair between the common divisor are co-prime.
A number x is a common divisor of N and M if, N%x = 0 and M%x = 0. Two numbers are co-prime if their Greatest Common Divisor is 1.  
Examples:
Input: arr[][] = {{12, 18}, {420, 660}} Output: 3 4 Explanation: For pair (12, 18): {1, 2, 3} are common divisors of both 12 and 18, and are pairwise co-prime. For pair (420, 660): {1, 2, 3, 5} are common divisors of both 12 and 18, and are pairwise co-prime.Input: arr[][] = {{8, 18}, {20, 66}} Output: 2 2  
Approach: The maximum count of common divisors of N and M such that the GCD of all the pairs between them is always 1 is 1 and all the common prime divisors of N and M. To count all the common prime divisors the idea is to find the GCD(say G) of the given two numbers and then count the number of prime divisors of the number G.
Below is the implementation of the above approach:
C++
Java
Python3
C#
Javascript
// C++ program for the above approach#include <bits/stdc++.h>using namespace std; // Function to find the gcd of// two numbersint gcd(int x, int y){    if (x % y == 0)        return y;    else        return gcd(y, x % y);} // Function to of pairwise co-prime// and common divisors of two numbersint countPairwiseCoprime(int N, int M){    // Initialize answer with 1,    // to include 1 in the count    int answer = 1;     // Count of primes of gcd(N, M)    int g = gcd(N, M);    int temp = g;     // Finding prime factors of gcd    for (int i = 2; i * i <= g; i++) {         // Increment count if it is        // divisible by i        if (temp % i == 0) {            answer++;             while (temp % i == 0)                temp /= i;        }    }    if (temp != 1)        answer++;     // Return the total count    return answer;} void countCoprimePair(int arr[][2], int N){     // Function Call for each pair    // to calculate the count of    // pairwise co-prime divisors    for (int i = 0; i < N; i++) {        cout << countPairwiseCoprime(arr[i][0],                                     arr[i][1])             << ' ';    }} // Driver Codeint main(){    // Given array of pairs    int arr[][2] = { { 12, 18 }, { 420, 660 } };    int N = sizeof(arr) / sizeof(arr[0]);     // Function Call    countCoprimePair(arr, N);    return 0;}
// Java program for the above approachclass GFG{ // Function to find the gcd of// two numbersstatic int gcd(int x, int y){    if (x % y == 0)        return y;    else        return gcd(y, x % y);} // Function to of pairwise co-prime// and common divisors of two numbersstatic int countPairwiseCoprime(int N, int M){    // Initialize answer with 1,    // to include 1 in the count    int answer = 1;     // Count of primes of gcd(N, M)    int g = gcd(N, M);    int temp = g;     // Finding prime factors of gcd    for (int i = 2; i * i <= g; i++)    {         // Increment count if it is        // divisible by i        if (temp % i == 0)        {            answer++;             while (temp % i == 0)                temp /= i;        }    }    if (temp != 1)        answer++;     // Return the total count    return answer;} static void countCoprimePair(int arr[][], int N){     // Function Call for each pair    // to calculate the count of    // pairwise co-prime divisors    for (int i = 0; i < N; i++)    {        System.out.print(countPairwiseCoprime(arr[i][0],                                               arr[i][1]) + " ");    }} // Driver Codepublic static void main(String[] args){    // Given array of pairs    int arr[][] = { { 12, 18 }, { 420, 660 } };    int N = arr.length;     // Function Call    countCoprimePair(arr, N);}} // This code is contributed by Rajput-Ji
# Python3 program for the above approach # Function to find the gcd of# two numbersdef gcd(x, y):    if (x % y == 0):        return y    else:        return gcd(y, x % y) # Function to of pairwise co-prime# and common divisors of two numbersdef countPairwiseCoprime(N, M):     # Initialize answer with 1,    # to include 1 in the count    answer = 1     # Count of primes of gcd(N, M)    g = gcd(N, M)    temp = g     # Finding prime factors of gcd    for i in range(2, g + 1):         if i * i > g:            break         # Increment count if it is        # divisible by i        if (temp % i == 0) :            answer += 1             while (temp % i == 0):                temp //= i     if (temp != 1):        answer += 1     # Return the total count    return answer def countCoprimePair(arr, N):     # Function Call for each pair    # to calculate the count of    # pairwise co-prime divisors    for i in range(N):        print(countPairwiseCoprime(arr[i][0],                                   arr[i][1]),                                     end = " ") # Driver Codeif __name__ == '__main__':       # Given array of pairs    arr= [ [ 12, 18 ], [ 420, 660 ] ]    N = len(arr)     # Function Call    countCoprimePair(arr, N) # This code is contributed by Mohit Kumar
// C# program for the above approachusing System;class GFG{ // Function to find the gcd of// two numbersstatic int gcd(int x, int y){    if (x % y == 0)        return y;    else        return gcd(y, x % y);} // Function to of pairwise co-prime// and common divisors of two numbersstatic int countPairwiseCoprime(int N, int M){    // Initialize answer with 1,    // to include 1 in the count    int answer = 1;     // Count of primes of gcd(N, M)    int g = gcd(N, M);    int temp = g;     // Finding prime factors of gcd    for (int i = 2; i * i <= g; i++)    {         // Increment count if it is        // divisible by i        if (temp % i == 0)        {            answer++;             while (temp % i == 0)                temp /= i;        }    }    if (temp != 1)        answer++;     // Return the total count    return answer;} static void countCoprimePair(int [,]arr, int N){     // Function Call for each pair    // to calculate the count of    // pairwise co-prime divisors    for (int i = 0; i < N; i++)    {        Console.Write(countPairwiseCoprime(arr[i, 0],                                           arr[i, 1]) + " ");    }} // Driver Codepublic static void Main(String[] args){    // Given array of pairs    int [,]arr = { { 12, 18 }, { 420, 660 } };    int N = arr.GetLength(0);     // Function Call    countCoprimePair(arr, N);}} // This code is contributed by Rajput-Ji
<script>// JavaScript program for the above approach  // Function to find the gcd of// two numbersfunction gcd(x, y){    if (x % y == 0)        return y;    else        return gcd(y, x % y);}  // Function to of pairwise co-prime// and common divisors of two numbersfunction countPairwiseCoprime(N, M){    // Initialize answer with 1,    // to include 1 in the count    let answer = 1;      // Count of primes of gcd(N, M)    let g = gcd(N, M);    let temp = g;      // Finding prime factors of gcd    for (let i = 2; i * i <= g; i++)    {          // Increment count if it is        // divisible by i        if (temp % i == 0)        {            answer++;              while (temp % i == 0)                temp /= i;        }    }    if (temp != 1)        answer++;      // Return the total count    return answer;}  function countCoprimePair(arr, N){      // Function Call for each pair    // to calculate the count of    // pairwise co-prime divisors    for (let i = 0; i < N; i++)    {        document.write(countPairwiseCoprime(arr[i][0],                                               arr[i][1]) + " ");    }} // Driver Code        // Given array of pairs    let arr = [[ 12, 18 ], [ 420, 660 ]];    let N = arr.length;      // Function Call    countCoprimePair(arr, N);              </script>
3 4
 
Time Complexity: O(X*(sqrt(N) + sqrt(M))), where X is the number of pairs and N & M are two pairs in arr[].Auxiliary Space: O(1)
mohit kumar 29
Rajput-Ji
code_hunt
divisors
Maths
Prime Number
prime-factor
Mathematical
Mathematical
Prime Number
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Algorithm to solve Rubik's Cube
Merge two sorted arrays with O(1) extra space
Program to print prime numbers from 1 to N.
Sum of the series (1*2) + (2*3) + (3*4) + ...... upto n terms
Segment Tree | Set 1 (Sum of given range)
Count ways to reach the n'th stair
Check if a number is Palindrome
Median of two sorted arrays of same size
Product of Array except itself
Fizz Buzz Implementation