mirror of
https://github.com/KevinMidboe/linguist.git
synced 2025-10-29 09:40:21 +00:00
36 lines
725 B
Prolog
36 lines
725 B
Prolog
; docformat = 'rst'
|
|
|
|
;+
|
|
; Find the greatest common denominator (GCD) for two positive integers.
|
|
;
|
|
; :Returns:
|
|
; integer
|
|
;
|
|
; :Params:
|
|
; a : in, required, type=integer
|
|
; first integer
|
|
; b : in, required, type=integer
|
|
; second integer
|
|
;-
|
|
function mg_gcd, a, b
|
|
compile_opt strictarr
|
|
on_error, 2
|
|
|
|
if (n_params() ne 2) then message, 'incorrect number of arguments'
|
|
if (~mg_isinteger(a) || ~mg_isinteger(b)) then begin
|
|
message, 'integer arguments required'
|
|
endif
|
|
|
|
_a = abs(a)
|
|
_b = abs(b)
|
|
minArg = _a < _b
|
|
maxArg = _a > _b
|
|
|
|
if (minArg eq 0) then return, maxArg
|
|
|
|
remainder = maxArg mod minArg
|
|
if (remainder eq 0) then return, minArg
|
|
|
|
return, mg_gcd(minArg, remainder)
|
|
end
|