Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Solución reto#24 Python #1366

Open
grisales54 opened this issue Oct 3, 2024 · 0 comments
Open

Solución reto#24 Python #1366

grisales54 opened this issue Oct 3, 2024 · 0 comments

Comments

@grisales54
Copy link

"""
/*

  • Crea dos funciones, una que calcule el máximo común divisor (MCD) y otra
  • que calcule el mínimo común múltiplo (mcm) de dos números enteros.
    • No se pueden utilizar operaciones del lenguaje que
  • lo resuelvan directamente.
    */
    """

def mcm(n1, n2):
# Lista de números primos utilizados para factorizar n1 y n2
primos = [
2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53,
59, 61, 67, 71, 73, 79, 83, 89, 97
]

mcm = []  # Lista para almacenar los factores primos comunes y no comunes

# Si n1 o n2 es un número primo, lo agregamos a la lista y lo reducimos a 1
if n1 in primos:
    mcm.append(n1)
    n1 = 1

if n2 in primos:
    mcm.append(n2)
    n2 = 1

# Mientras n1 o n2 sean mayores que 1, continuamos factorizando
while n1 > 1 or n2 > 1:

    # Recorremos la lista de primos para encontrar divisores comunes o no comunes
    for i in primos:

        if n1 % i == 0 and n2 % i == 0:
            # Si ambos números son divisibles por el primo i, se agrega a la lista mcm
            mcm.append(i)
            n1 = n1 / i
            n2 = n2 / i

        else:
            if n1 % i == 0:
                # Si solo n1 es divisible por i, lo agregamos a la lista mcm
                mcm.append(i)
                n1 = n1 / i

            if n2 % i == 0:
                # Si solo n2 es divisible por i, lo agregamos a la lista mcm
                mcm.append(i)
                n2 = n2 / i

# Multiplicamos todos los factores almacenados en la lista mcm para obtener el MCM
multi = 1
for i in range(len(mcm)):
    multi = mcm[i] * multi

return multi  # Retornamos el MCM

def mcd(n1, n2):
# Lista de números primos utilizados para factorizar n1 y n2
primos = [
2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53,
59, 61, 67, 71, 73, 79, 83, 89, 97
]

divisores_1 = []  # Lista para almacenar los divisores primos de n1
divisores_2 = []  # Lista para almacenar los divisores primos de n2

# Si n1 o n2 es un número primo, lo agregamos a la lista de divisores y lo reducimos a 1
if n1 in primos:
    divisores_1.append(n1)
    n1 = 1

if n2 in primos:
    divisores_2.append(n2)
    n2 = 1

# Mientras n1 o n2 sean mayores que 1, continuamos factorizando
while n1 > 1 or n2 > 1:

    # Recorremos la lista de primos para encontrar divisores
    for i in primos:

        if n1 % i == 0:
            # Si n1 es divisible por el primo i, lo agregamos a la lista divisores_1
            divisores_1.append(i)
            n1 = n1 / i

        if n2 % i == 0:
            # Si n2 es divisible por el primo i, lo agregamos a la lista divisores_2
            divisores_2.append(i)
            n2 = n2 / i

# Ordenamos las listas de divisores en orden descendente
divisores_1.sort(reverse=True)
divisores_2.sort(reverse=True)

# Copiamos las listas para manipularlas sin afectar las originales
temp_lista1 = divisores_1.copy()
temp_lista2 = divisores_2.copy()

comunes = []  # Lista para almacenar los divisores comunes

# Recorremos los divisores de n1
for elemento in divisores_1:
    if elemento in temp_lista2:
        # Contamos las ocurrencias en ambas listas temporales
        count1 = temp_lista1.count(elemento)
        count2 = temp_lista2.count(elemento)

        # Añadimos el elemento el número mínimo de veces que aparece en ambas listas
        for _ in range(min(count1, count2)):
            comunes.append(elemento)

        # Eliminamos todas las ocurrencias del elemento de las listas temporales
        temp_lista1 = [x for x in temp_lista1 if x != elemento]
        temp_lista2 = [x for x in temp_lista2 if x != elemento]

# Multiplicamos los divisores comunes para obtener el MCD
resultado = 1
for i in range(len(comunes)):
    resultado = comunes[i] * resultado

return resultado  # Retornamos el MCD

Ejemplo de uso de las funciones

print(f"El mínimo común múltiplo es: {mcm(18, 11)}")
print(f"El máximo común divisor es: {mcd(380, 420)}")

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant