给定两个整数A和B。任务是从A和B的公因数中找到最大元素的数量,以使所有选定元素互为互质。
例子:
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
方法:可以观察到, A和B的所有公因子必须是其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