📜  A和B的共同除数的最大数量,以使所有元素互为互质

📅  最后修改于: 2021-04-28 14:27:45             🧑  作者: Mango

给定两个整数AB。任务是从AB的公因数中找到最大元素的数量,以使所有选定元素互为互质。

例子:

方法:可以观察到, AB的所有公因子必须是其gcd的因子。并且,为了使该gcd的因数互为互质,该对中的一个元素必须为1或两个元素都必须为质数。因此,答案将比gcd(A,B)的质数除数大1。请注意,添加1是因为1也可以是所选除数的一部分,因为它与其他对的gcd始终为1

下面是上述方法的实现:

C++
// C++ implementation of the approach
#include 
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 
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


输出:
3