25 lines
528 B
SQL
25 lines
528 B
SQL
DROP FUNCTION IF EXISTS gcd;
|
|
DELIMITER |
|
|
|
|
CREATE FUNCTION gcd(x INT, y INT)
|
|
RETURNS INT
|
|
BEGIN
|
|
SET @dividend=GREATEST(ABS(x),ABS(y));
|
|
SET @divisor=LEAST(ABS(x),ABS(y));
|
|
IF @divisor=0 THEN
|
|
RETURN @dividend;
|
|
END IF;
|
|
SET @gcd=NULL;
|
|
SELECT gcd INTO @gcd FROM
|
|
(SELECT @tmp:=@dividend,
|
|
@dividend:=@divisor AS gcd,
|
|
@divisor:=@tmp % @divisor AS remainder
|
|
FROM mysql.help_relation WHERE @divisor>0) AS x
|
|
WHERE remainder=0;
|
|
RETURN @gcd;
|
|
END;|
|
|
|
|
DELIMITER ;
|
|
|
|
SELECT gcd(12345, 9876);
|