gr. gem. Teiler / kl. gem. Vielfaches

    • Offizieller Beitrag

    Hi,
    nix großes, aber vielleicht für irgendwen nützlich.

    Ermittlung des
    Größten Gemeinsamen Teilers
    oder des
    Kleinsten Gemeinsamen Vielfachen
    nach dem Euklidschen Algorithmus. (Die Variante mit Primfaktorzerlegung, mit der wir in der Schule gequält wurden, ist wirklich spürbar langsamer).

    Edit: kleine Erweiterung zur Rückgabe beider Werte

    Spoiler anzeigen
    [autoit]


    MsgBox(0, 'ggT', _ggTkgV(256,12))
    MsgBox(0, 'kgV', _ggTkgV(256,12,1))
    MsgBox(0, 'ggT und kgV', _ggTkgV(256,12,2))

    [/autoit] [autoit][/autoit] [autoit]

    ;===============================================================================
    ;
    ; Function Name: _ggTkgV(Zahl1, Zahl2 [Rückgabetyp])
    ; Description:: ermittelt aus 2 natürlichen Zahlen den größten gemeinsamen Teiler
    ; und/oder das kleinste gemeinsame Vielfache
    ; Parameter(s): $a, $b natürliche Zahlen
    ; $Ret Rückgabe ggT = 0 (Standard); kgV = 1; beides = 2 (getrennt mit '|')
    ;
    ;===============================================================================
    Func _ggTkgV($a, $b, $Ret=0)
    Local $c, $f, $m = $a, $n = $b
    $c = 1
    While $c <> 0
    $f = Int($a / $b)
    $c = $a - $b * $f
    If $c <> 0 Then
    $a = $b
    $b = $c
    EndIf
    WEnd
    Switch $Ret
    Case 0 ; ggT
    Return $b
    Case 1 ; kgV
    Return $m * $n / $b
    Case 2 ; String "ggT | kgV"
    Return $b & '|' & $m * $n / $b
    EndSwitch
    EndFunc ;==>_ggTkgV

    [/autoit]