- 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
MsgBox(0, 'ggT', _ggTkgV(256,12))
MsgBox(0, 'kgV', _ggTkgV(256,12,1))
MsgBox(0, 'ggT und kgV', _ggTkgV(256,12,2))
;===============================================================================
;
; 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