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
所以有两个数字的 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