mirror of
				https://github.com/KevinMidboe/linguist.git
				synced 2025-10-29 17:50:22 +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
 |