Jump to content

Greatest common divisor: Difference between revisions

Added Transact-SQL
No edit summary
(Added Transact-SQL)
Line 5,242:
150 LET B=C
160 GOTO 70</lang>
 
 
=={{header|Transact-SQL}}==
<lang Transact-SQL>
CREATE OR ALTER FUNCTION [dbo].[PGCD]
( @a BigInt
, @b BigInt
)
RETURNS BigInt
WITH RETURNS NULL ON NULL INPUT
-- Calculates the Greatest Common Denominator of two numbers (1 if they are coprime).
BEGIN
DECLARE @PGCD BigInt;
 
WITH Vars(A, B)
As ( SELECT Max(V.N) As A
, Min(V.N) As B
FROM ( VALUES ( Abs(@a) , Abs(@b)) ) Params(A, B)
-- First, get absolute value
Cross APPLY ( VALUES (Params.A) , (Params.B) ) V(N)
-- Then, order parameters without Greatest/Least functions
WHERE Params.A > 0
And Params.B > 0 -- If 0 passed in, NULL shall be the output
)
, Calc(A, B)
As ( SELECT A
, B
FROM Vars
 
UNION ALL
 
SELECT B As A
, A % B As B -- Self-ordering
FROM Calc
WHERE Calc.A > 0
And Calc.B > 0
)
SELECT @PGCD = Min(A)
FROM Calc
WHERE Calc.B = 0
;
 
RETURN @PGCD;
 
END
</lang>
 
 
Anonymous user
Cookies help us deliver our services. By using our services, you agree to our use of cookies.