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

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: 3
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: 1

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++

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// Java implementation of the approach 
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

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# 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

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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

chevron_right


Output:

3


My Personal Notes arrow_drop_up

pawanasipugmailcom

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.