Find two co-prime integers such that the first divides A and the second divides B

Given two integers A and B, the task is to find two co-prime numbers C1 and C2 such that C1 divides A and C2 divides B.

Examples:

Input: A = 12, B = 16
Output: 3 4
12 % 3 = 0
16 % 4 = 0
gcd(3, 4) = 1



Input: A = 542, B = 762
Output: 271 381

Naive approach: A simple solution is to store all of the divisors of A and B then iterate over all the divisors of A and B pairwise to find the pair of elements which are co-prime.

Efficient approach: If an integer d divides gcd(a, b) then gcd(a / d, b / d) = gcd(a, b) / d. More formally, if num = gcd(a, b) then gcd(a / num, b / num) = 1 i.e. (a / num) and (b / num) are relatively co-prime.
So in order to find the required numbers, find gcd(a, b) and store it in a variable gcd. Now the required numbers will be (a / gcd) and (b / gcd).

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 find the required numbers
void findNumbers(int a, int b)
{
  
    // GCD of the given numbers
    int gcd = __gcd(a, b);
  
    // Printing the requried numbers
    cout << (a / gcd) << " " << (b / gcd);
}
  
// Driver code
int main()
{
    int a = 12, b = 16;
  
    findNumbers(a, b);
  
    return 0;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// Java implementation of the approach 
import java.math.*;
  
class GFG
{
    public static int findGCD(int a, int b)
    {
        if(b == 0)
            return a;
        else
            return findGCD(b, a % b);
    }
  
    // Function to find the required numbers 
    static void findNumbers(int a, int b) 
    
      
        // GCD of the given numbers 
        int gcd = findGCD(a, b);
          
        // Printing the requried numbers 
        System.out.println((a / gcd) + " "
                           (b / gcd));
          
    
  
    // Driver code 
    public static void main(String[] args) 
    
        int a = 12, b = 16
      
        findNumbers(a, b); 
    }
}
  
// This code is contributed by Naman_Garg

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# Python3 implementation of the approach 
  
# import gcd function from math module
from math import gcd
  
# Function to find the required numbers 
def findNumbers(a, b) : 
  
    # GCD of the given numbers 
    __gcd = gcd(a, b); 
  
    # Printing the requried numbers 
    print((a // __gcd), (b // __gcd)); 
  
# Driver code 
if __name__ == "__main__"
  
    a = 12; b = 16
  
    findNumbers(a, b); 
  
# This code is contributed by AnkitRai01

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// C# implementation of the approach
using System;
  
class GFG
{
    public static int findGCD(int a, int b)
    {
        if(b == 0)
            return a;
        else
            return findGCD(b, a % b);
    }
  
    // Function to find the required numbers 
    static void findNumbers(int a, int b) 
    
      
        // GCD of the given numbers 
        int gcd = findGCD(a, b);
          
        // Printing the requried numbers 
        Console.Write((a / gcd) + " "
                      (b / gcd));
          
    
  
    // Driver code 
    static public void Main ()
    {
        int a = 12, b = 16; 
      
        findNumbers(a, b); 
    }
}
  
// This code is contributed by ajit

chevron_right


Output:

3 4


My Personal Notes arrow_drop_up

Check out this Author's contributed articles.

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.



Improved By : AnkitRai01, Naman_Garg, jit_t