Dados dos números enteros A y B , la tarea es encontrar dos números coprimos C1 y C2 tales que C1 divide a A y C2 divide a B.
Ejemplos:
Entrada: A = 12, B = 16
Salida: 3 4
12 % 3 = 0
16 % 4 = 0
mcd(3, 4) = 1
Entrada: A = 542, B = 762
Salida: 271 381
Enfoque ingenuo: una solución simple es almacenar todos los divisores de A y B y luego iterar sobre todos los divisores de A y B por pares para encontrar el par de elementos que son coprimos.
Enfoque eficiente: si un entero d divide a mcd(a, b) entonces mcd(a / d, b / d) = mcd(a, b) / d . Más formalmente, si num = mcd(a, b) entonces mcd(a / num, b / num) = 1 , es decir , (a / num) y (b / num) son relativamente coprimos.
Entonces, para encontrar los números requeridos, encuentre mcd (a, b) y guárdelo en una variablegcd _ Ahora los números requeridos serán (a/gcd) y (b/gcd) .
A continuación se muestra la implementación del enfoque anterior:
C++
// 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 required numbers cout << (a / gcd) << " " << (b / gcd); } // Driver code int main() { int a = 12, b = 16; findNumbers(a, b); return 0; }
Java
// 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 required 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
Python3
# 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 required numbers print((a // __gcd), (b // __gcd)); # Driver code if __name__ == "__main__" : a = 12; b = 16; findNumbers(a, b); # This code is contributed by AnkitRai01
C#
// 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 required 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
Javascript
<script> // Javascript implementation of the approach function findGCD(a, b) { if (b == 0) return a; else return findGCD(b, a % b); } // Function to find the required numbers function findNumbers(a, b) { // GCD of the given numbers var gcd = findGCD(a, b); // Printing the required numbers document.write((a / gcd) + " " + (b / gcd)); } // Driver Code var a = 12, b = 16; findNumbers(a, b); // This code is contributed by Khushboogoyal499 </script>
3 4
Complejidad de tiempo: O(log(min(a, b))), donde a y b son los dos parámetros de __gcd
Espacio auxiliar: O(log(min(a, b)))
Publicación traducida automáticamente
Artículo escrito por dangenmaster2 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA