使用庫函式查詢最小公倍數的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函式獲得。