Open In App

Maximum count of common divisors of A and B such that all are co-primes to one another

Improve
Improve
Like Article
Like
Save
Share
Report

Given two integers A and B. The task is to find the count of maximum elements from the common divisors of A and B such that all selected elements are co-prime to one another.
Examples: 
 

Input: A = 12, B = 18 
Output:
Common divisors of A and B are 1, 2, 3 and 6. 
Select 1, 2, and 3. All the pairs are co primes to 
one another i.e. gcd(1, 2) = gcd(1, 3) = gcd(2, 3) = 1.
Input: A = 1, B = 3 
Output:
 

 

Approach: It can be observed that all the common factors of A and B must be a factor of their gcd. And, in order for the factors of this gcd to be co-prime to one another, one element of the pair must be either 1 or both the elements must be prime. So the answer will be 1 more than the count of prime divisors of gcd(A, B). Note that 1 is added because 1 can also be a part of the chosen divisors as its gcd with the other pairs will always be 1.
Below is the implementation of the above approach: 
 

C++




// C++ implementation of the approach
#include <bits/stdc++.h>
using namespace std;
 
// Function to return the count of common factors
// of a and b such that all the elements
// are co-prime to one another
int maxCommonFactors(int a, int b)
{
    // GCD of a and b
    int gcd = __gcd(a, b);
 
    // Include 1 initially
    int ans = 1;
 
    // Find all the prime factors of the gcd
    for (int i = 2; i * i <= gcd; i++) {
        if (gcd % i == 0) {
            ans++;
            while (gcd % i == 0)
                gcd /= i;
        }
    }
 
    // If gcd is prime
    if (gcd != 1)
        ans++;
 
    // Return the required answer
    return ans;
}
 
// Driver code
int main()
{
    int a = 12, b = 18;
 
    cout << maxCommonFactors(a, b);
 
    return 0;
}


Java




// Java implementation of the approach
import java.io.*;
public class GFG
{
     
static int gcd(int a, int b)
{
    if (b == 0)
        return a;
    return gcd(b, a % b);
}
 
// Function to return the count of common factors
// of a and b such that all the elements
// are co-prime to one another
static int maxCommonFactors(int a, int b)
{
     
    // GCD of a and b
    int __gcd = gcd(a, b);
 
    // Include 1 initially
    int ans = 1;
 
    // Find all the prime factors of the gcd
    for (int i = 2; i * i <= __gcd; i++)
    {
        if (__gcd % i == 0)
        {
            ans++;
            while (__gcd % i == 0)
                __gcd /= i;
        }
    }
 
    // If gcd is prime
    if (__gcd != 1)
        ans++;
 
    // Return the required answer
    return ans;
}
 
// Driver code
public static void main (String[] args)
{
    int a = 12, b = 18;
 
    System.out.println(maxCommonFactors(a, b));
}
}
 
// This code is contributed by AnkitRai01


Python3




# Python3 implementation of the approach
import math
 
# Function to return the count of common factors
# of a and b such that all the elements
# are co-prime to one another
def maxCommonFactors(a, b):
     
    # GCD of a and b
    gcd = math.gcd(a, b)
 
    # Include 1 initially
    ans = 1;
 
    # Find all the prime factors of the gcd
    i = 2
    while (i * i <= gcd):
        if (gcd % i == 0):
            ans += 1
            while (gcd % i == 0):
                gcd = gcd // i
        i += 1   
                 
    # If gcd is prime
    if (gcd != 1):
        ans += 1
 
    # Return the required answer
    return ans
     
# Driver code
a = 12
b = 18
print(maxCommonFactors(a, b))
 
# This code is contributed by
# divyamohan123


C#




// C# implementation of the above approach
using System;        
 
class GFG
{
     
    static int gcd(int a, int b)
    {
        if (b == 0)
            return a;
        return gcd(b, a % b);
    }
 
    // Function to return the count of common factors
    // of a and b such that all the elements
    // are co-prime to one another
    static int maxCommonFactors(int a, int b)
    {
 
        // GCD of a and b
        int __gcd = gcd(a, b);
 
        // Include 1 initially
        int ans = 1;
 
        // Find all the prime factors of the gcd
        for (int i = 2; i * i <= __gcd; i++)
        {
            if (__gcd % i == 0)
            {
                ans++;
                while (__gcd % i == 0)
                    __gcd /= i;
            }
        }
 
        // If gcd is prime
        if (__gcd != 1)
            ans++;
 
        // Return the required answer
        return ans;
    }
 
    // Driver code
    public static void Main (String[] args)
    {
        int a = 12, b = 18;
 
        Console.WriteLine(maxCommonFactors(a, b));
    }
}
 
// This code is contributed by Rajput-Ji


Javascript




<script>
// Javascript implementation of the approach
 
function GCD(a, b)
{
  if (b == 0)
      return a;
  return GCD(b, a % b);
}
     
// Function to return the count of common factors
// of a and b such that all the elements
// are co-prime to one another
function maxCommonFactors(a, b)
{
    // GCD of a and b
    let gcd = GCD(a, b);
 
    // Include 1 initially
    let ans = 1;
 
    // Find all the prime factors of the gcd
    for (let i = 2; i * i <= gcd; i++) {
        if (gcd % i == 0) {
            ans++;
            while (gcd % i == 0)
                gcd = parseInt(gcd / i);
        }
    }
 
    // If gcd is prime
    if (gcd != 1)
        ans++;
 
    // Return the required answer
    return ans;
}
 
// Driver code
    let a = 12, b = 18;
 
    document.write(maxCommonFactors(a, b));
 
</script>


Output: 

3

 

Time Complexity: O((log(min(a, b)))2), where a and b are two parameters of gcd
Auxiliary Space: O(1)



Last Updated : 15 Dec, 2022
Like Article
Save Article
Previous
Next
Share your thoughts in the comments
Similar Reads