Trucos y tretas en Excel VBA para programadores - Máximo común divisor

Este código permite calcular el Máximo Común Divisor entre dós números usando el algoritmo euclidiano.  Sólo debes copiar y pegar este código.

'Maximo comun divisor - Algoritmo euclidiano
Function MaxComDiv(A, B)
    'C almacena divisores, pero al final termina en valor 0
    C = MCD1(A, B)
    'D almacena el posible valor final de MaxComDiv, que es el valor de C antes de llegar a cero
    D = C
    'Primera verificación de MaxComDiv, B es el MaxComDiv de A
    If A > B Then
        'PEQ - Número más pequeño entre parámetros A y B
        PEQ = B
        'GDE - Número más grande entre parámetros A y B
        GDE = A
    Else
        PEQ = A
        GDE = B
    End If
    If GDE / PEQ = Int(GDE / PEQ) Then
        MaxComDiv = PEQ
    'Si la primera verificación no funciona, usar algoritmo euclidiano
    Else
        'Empiezan las iteraciones de A, B, C y D hasta llegar al MaxComDiv
        'B pasa a ser A
        'C pasa a ser B
        'Se recalcula C para ver si C alcanza valor cero
        'Si C es cero, D es el C anterior, D es el MaxComDiv
        Do Until C = 0
            A = B
            B = C
            C = MCD1(A, B)
            If C = 0 Then
                MaxComDiv = D
            Else
                D = C
            End If
        Loop
    End If
End Function

'MCD1 - Funcion auxiliar para encapsular y acortar el codigo.
Function MCD1(A, B)
    'GDE = PEQ * q + r
    'El último valor r que no tenga valor 0 es el máximo comun divisor
    If A > B Then
        PEQ = B
        GDE = A
    Else
        PEQ = A
        GDE = B
    End If
    q = Int(GDE / PEQ) * PEQ
    r = GDE - q
    MCD1 = r
End Function

Para usar el código sólo llamas a la función y le das dos valores.  Mira estos ejemplos:

Sub test()
    A = 3768
    B = 1701
    MsgBox MaxComDiv(A, B)
End Sub

Sub test2()
    A = 18
    B = 2
    MsgBox MaxComDiv(A, B)
End Sub

El algoritmo euclidiano es un método computacionalmente eficiente, y tiene muchas aplicaciones.

Accede a Rankia
¡Sé el primero en comentar!