使用库函数查找最小公倍数的Haskell程序
在Haskell中,我们可以使用GCD函数来查找给定数字的最小公倍数。在第一个例子中,我们将使用(a * b) `div` (gcd a b)函数,在第二个例子中,我们将使用foldl' (\x y -> (x*y) `div` (gcd x y))函数。在第三个例子中,我们将使用gcd' b (a `mod` b)函数。
算法
步骤1 − 最小公倍数函数使用最大公约数函数定义为:lcm a b = (a * b) `div` (gcd a b)。
步骤2 − 程序执行将从main函数开始。main()函数控制整个程序。它写成main = do。它调用带有值的lcm函数并打印两个数的最小公倍数。
步骤3 − 变量“a”和“b”被初始化。它将保存要查找最小公倍数的两个值。
步骤4 − 函数调用后,使用‘putStrLn’语句将结果的最小公倍数值打印到控制台。
示例1
在这个例子中,我们将看到如何找到给定数字的最小公倍数。这可以通过使用gcd函数来完成。
import Prelude lcm :: Integral a => a -> a -> a lcm a b = (a * b) `div` (gcd a b) main :: IO () main = do let a = 4 let b = 5 let lcmVal = Prelude.lcm a b putStrLn $ "The LCM of " ++ show a ++ " and " ++ show b ++ " is: " ++ show lcmVal
输出
The LCM of 4 and 5 is: 20
示例2
在这个例子中,我们将看到如何找到给定数字的最小公倍数。这可以通过使用gcd函数和foldl函数来完成。此示例使用foldl函数迭代整数列表,并计算列表中元素的最小公倍数。
import Data.List (foldl') lcm'' :: Integral a => [a] -> a lcm'' = foldl' (\x y -> (x*y) `div` (gcd x y)) 1 main :: IO () main = do let a = 4 let b = 5 let lcmVal = Prelude.lcm a b putStrLn $ "The LCM of " ++ show a ++ " and " ++ show b ++ " is: " ++ show lcmVal
输出
The LCM of 4 and 5 is: 20
示例3
在这个例子中,我们将看到如何找到给定数字的最小公倍数。这可以通过使用gcd函数和foldl1函数来完成。此示例使用foldl1函数,该函数使用列表的第一个元素作为初始累加器值,来迭代整数列表,并计算列表中元素的最小公倍数。
import Data.List (foldl1') lcm''' :: Integral a => [a] -> a lcm''' = foldl1' (\x y -> (x*y) `div` (gcd x y)) main :: IO () main = do let a = 4 let b = 5 let lcmVal = Prelude.lcm a b putStrLn $ "The LCM of " ++ show a ++ " and " ++ show b ++ " is: " ++ show lcmVal
输出
The LCM of 4 and 5 is: 20
示例4
在这个例子中,我们将看到如何找到给定数字的最小公倍数。这可以通过递归使用gcd函数来完成。此示例使用递归查找两个数字的最大公约数,然后使用公式LCM(a,b) = (a*b)/GCD(a,b)来查找两个数字的最小公倍数。
lcm' :: Integral a => a -> a -> a lcm' a b = (a * b) `div` (gcd' a b) where gcd' a 0 = a gcd' a b = gcd' b (a `mod` b) main :: IO () main = do let a = 4 let b = 5 let lcmVal = Prelude.lcm a b putStrLn $ "The LCM of " ++ show a ++ " and " ++ show b ++ " is: " ++ show lcmVal
输出
The LCM of 4 and 5 is: 20
结论
在Haskell中,Prelude库中没有内置函数来查找两个数字的最小公倍数,但是我们可以使用Prelude库中的gcd函数来查找两个数字的最大公约数,然后用它来查找最小公倍数。为了找到给定数字的最小公倍数,我们可以使用gcd函数以及Haskell中的foldl或foldl1函数。它也可以通过递归使用gcd函数获得。