最大公约数
来自 PostgreSQL 维基
跳转到导航跳转到搜索
使用 CTE,最大公约数 (gcd) 的计算非常简单。
CREATE OR REPLACE FUNCTION gcd( a bigint, b bigint)
RETURNS bigint
IMMUTABLE
STRICT
LANGUAGE SQL
AS $$
WITH RECURSIVE t(a,b) AS (
VALUES (abs($1)::bigint, abs($2)::bigint)
UNION ALL
SELECT b, mod(a,b) FROM t
WHERE b > 0
)
SELECT a FROM t WHERE b = 0
$$;
感谢 David Fetter 提供此查询。 感谢 Pasha Golub 提供了更快、更准确的版本。