Haskell 中三个数的最大公约数

Greatest common divisor of three numbers in Haskell

所以有两个数字的 gcd,我知道如何定义。

gcd a 0 = a

gcd a b = gcd b (a `mod` b)

gcd a b c = gcd3 

我如何定义一个 gcd3 来寻找三个数字的最大除数。 gcd3的定义是:

gcd3 :: Int -> Int -> Int -> Int

您可以像计算三个数字的总和一样计算三个数字的 gcd:一次计算两个数字。

gcd3 :: Int -> Int -> Int -> Int
gcd3 x y z = (x `gcd` y) `gcd` z

好吧,如果你已经知道如何找到两个数字的 GCD,你可以找到任意数量数字的 GCD:

gcd3 a b c = gcd a (gcd b c)

gcd4 a b c d = gcd a (gcd3 b c d)
-- Which is the same as
gcd4 a b c d = gcd a (gcd b (gcd c d))

以此类推

您可以使用 foldr1 来计算任意数量的数字:

gcdN = foldr1 gcd

然后我们可以使用:

gcdN [2, 4, 8, 12]

输出将是:

2