Haskell程式計算最小公倍數


本教程將幫助我們計算Haskell程式設計中的最小公倍數。最小公倍數(LCM)是兩個或多個整數的倍數中最小的正整數。可以透過列出每個數字的倍數並找到所有數字共有的最小倍數來找到它。例如,4和6的最小公倍數是12,因為12是4和6的倍數中最小的數字。

方法1:使用使用者定義的lcm’函式

在這種方法中,gcd函式來自Data.List庫,用於計算兩個整數的最大公約數(GCD),然後使用該值透過取兩個整數的乘積的絕對值併除以GCD來計算LCM。

演算法

  • 步驟1 − 匯入Data.List模組以使用gcd函式。

  • 步驟2 − 使用gcd函式定義使用者定義的lcm’函式,如下所示:lcm' a b = abs (a * b) `div` (gcd a b)。計算兩個整數的最大公約數(GCD),然後使用此值透過取兩個整數的乘積的絕對值併除以GCD來計算LCM。

  • 步驟3 − 程式執行將從main函式開始。main()函式控制整個程式。它寫成main = do。它接收兩個整數作為輸入並列印lcm’函式的輸出。

  • 步驟4 − 變數名為“x”。它將呼叫lcm’函式並將兩個整數作為引數傳遞給此函式。

  • 步驟5 − 使用‘print’函式將結果列印到控制檯。

示例

在此示例中,我們將瞭解如何計算最小公倍數。這可以透過使用使用者定義的lcm’函式來完成。

import Data.List
import Text.Printf
lcm' :: Integer -> Integer -> Integer
lcm' a b = abs (a * b) `div` (gcd a b)
main = do
   let  a = 15
   let  b = 20
   let x = lcm' a b
   printf"LCM of %d and %d is:" a b
   print x

輸出

LCM of 15 and 20 is:60

方法2:使用div函式

在這種方法中,lcm函式接收兩個整數作為引數,並使用公式(a * b) div (gcd a b)計算它們的LCM。

演算法

  • 步驟1 − 使用div和gcd函式定義lcm函式,如下所示:lcm a b = (a * b) `div` (gcd a b)。

  • 步驟2 − 程式執行將從main函式開始。main()函式控制整個程式。它寫成main = do。它接收兩個整數作為輸入並列印lcm函式的輸出。

  • 步驟3 − 變數名為“x”。它將呼叫Prelude模組中的lcm函式,它是Prelude庫中的內建函式,並將兩個整數作為引數傳遞給此函式。

  • 步驟4 − 使用‘print’函式將結果列印到控制檯。

示例

在此示例中,我們將瞭解如何計算最小公倍數。這可以透過使用div函式來完成。

lcm :: Integer -> Integer -> Integer
lcm a b = (a * b) `div` (gcd a b)

main = do
   let x = Prelude.lcm 15 20
   print x

輸出

60

方法3:使用foldl1函式

在這種方法中,整數列表傳遞給lcmFold函式,該函式使用foldl1函式重複將lcm函式應用於列表的元素,從前兩個元素開始,然後繼續使用結果和下一個元素,直到整個列表被處理。

演算法

  • 步驟1 − 匯入Data.List模組。

  • 步驟2 − 使用foldl1定義lcmFold函式,應用於列表的元素,如下所示:lcmFold = foldl1 lcm。並將結果作為最小公倍數返回。

  • 步驟3 − 程式執行將從main函式開始。main()函式控制整個程式。它寫成main = do。它接收一個整數列表作為輸入並列印定義的lcmFold函式的輸出。

  • 步驟4 − 變數名為“x”,初始化為呼叫lcmFold函式並將整數列表傳遞給它。

  • 步驟5 − 使用‘print’函式將結果列印到控制檯。

示例

在此示例中,我們將瞭解如何計算最小公倍數。這可以透過使用foldl1函式來完成。

import Data.List

lcmFold :: [Integer] -> Integer
lcmFold = foldl1 lcm

main = do
   let x = lcmFold [15, 20]
   print x

輸出

60

結論

可以透過使用使用者定義的lcm’函式、使用foldl1函式或使用div函式來計算在Haskell中傳遞的數字的最小公倍數。在呼叫定義的函式時,使用‘print’函式將結果列印到控制檯。

更新於: 2023年3月1日

441 次瀏覽

開啟你的職業生涯

透過完成課程獲得認證

立即開始
廣告
© . All rights reserved.