📌  相关文章
📜  两个给定数字的成对互质数和公共除数的最大数量

📅  最后修改于: 2021-04-27 21:32:07             🧑  作者: Mango

给定两个数字{N,M}的成对arr []的数组,任务是找到每对NM的公共除数的最大数量,以使公共除数之间的每对都是互质的。

例子:

方法:NM的公约数的最大计数,使得它们之间的所有对的GCD总是1是1和N和M所有常见的素因子。要计算所有常见的素数除数,想法是找到给定两个数的GCD(例如G ),然后计算数G的素数除数。

下面是上述方法的实现:

C++
// C++ program for the above approach
#include 
using namespace std;
 
// Function to find the gcd of
// two numbers
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 numbers
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;
}
 
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 Code
int 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
// Java program for the above approach
class GFG{
 
// Function to find the gcd of
// two numbers
static 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 numbers
static 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 Code
public 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
# Python3 program for the above approach
 
# Function to find the gcd of
# two numbers
def 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 numbers
def 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 Code
if __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#
// C# program for the above approach
using System;
class GFG{
 
// Function to find the gcd of
// two numbers
static 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 numbers
static 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 Code
public 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


输出:
3 4





时间复杂度: O(X *(sqrt(N)+ sqrt(M))),其中X是arr []中的对数,N&M是两对。
辅助空间: O(1)