Haskell程式:求兩個數的最小公倍數
本教程將討論如何編寫一個Haskell程式來求兩個數的最小公倍數(LCM)。Haskell是一種函數語言程式設計語言。
兩個數的最小公倍數是指能被這兩個數整除的最小正整數。
在本教程中,我們將討論五種不同的方法來實現求兩個數最小公倍數的程式。
使用內建函式lcm。
使用列表推導式計算LCM。
使用遞迴函式計算LCM。
使用最大公約數(HCF)函式計算LCM。
演算法步驟
輸入兩個整數。
實現LCM計算邏輯。
顯示輸出。
使用內建函式gcd。
示例
使用內建函式求LCM的程式
main :: IO() main = do -- declaring and initializing variables let a = 10 let b = 23 -- print the lcm by invoking the inbuilt function lcm putStr("LCM of "++ (show a) ++ " and "++ (show b) ++" is:") print (lcm a b)
輸出
LCM of 10 and 23 is:230
在上面的程式中,我們宣告並初始化了值為10和23的變數,我們需要求這兩個數的最小公倍數。我們使用了內建函式lcm,它接收兩個整數作為引數並返回這兩個數的最小公倍數。最後,我們使用print函式列印函式的輸出。
使用列表推導式求LCM
示例
-- function declaration lcm2 :: Int->Int->Int -- function definition lcm2 a b = head [x|x<-[1..(a*b)],(mod x a)==0,(mod x b)==0] main :: IO() main = do let a = 10 let b = 23 -- displaying the output returned from function lcm2 putStr("LCM of "++ (show a) ++ " and "++ (show b) ++" is:") print (lcm2 a b)
輸出
LCM of 10 and 23 is:230
在上面的程式中,我們聲明瞭函式lcm2,它接收兩個整數作為引數並返回一個整數。在函式定義中,我們接收整數a和b作為引數,並生成一個從1到a*b的列表,從中過濾出能被a和b整除的數。最後,我們使用head函式返回列表中的第一個數。head函式接收列表作為引數並返回列表的第一個元素。由於列表按升序包含所有能被a和b整除的元素,因此第一個元素將是最小公倍數。我們在主函式中呼叫該函式並列印返回的輸出。
使用遞迴函式求LCM
示例
使用遞迴函式求LCM的程式
-- function declaration lcm3 :: Int->Int->Int->Int -- function definition lcm3 a b c = if ((mod c a)==0&&(mod c b)==0) then c else lcm3 a b (c+1) main :: IO() main = do let a = 10 let b = 40 -- printing the output by invoking lcm3 function putStr("LCM of "++ (show a) ++ " and "++ (show b) ++" is:") print (lcm3 a b 1)
輸出
LCM of 10 and 40 is:40
在上面的程式中,我們聲明瞭函式lcm3,它接收三個整數作為輸入並返回一個整數。在函式定義中,我們接收三個整數作為引數,其中c的初始值為1。在函式中,我們檢查c是否能被a和b整除。如果是,則返回整數c;否則,我們透過將c的值加1來遞迴呼叫lcm3函式,即函式從1開始遞迴迭代,並返回第一個能被a和b整除的數,即這兩個數的最小公倍數(LCM)。
使用最大公約數(HCF)函式求LCM
示例
使用最大公約數(HCF)函式求LCM的程式
-- function declaration hcf :: Int->Int->Int -- function definition hcf a 0 = a hcf a b = hcf b (mod a b) -- function declaration lcm4 :: Int->Int->Int -- function definition lcm4 a b = div (a*b) (hcf a b) main :: IO() main = do let a = 10 let b = 25 -- printing the output by invoking the lcm4 function putStr("LCM of "++ (show a) ++ " and "++ (show b) ++" is:") print (lcm4 a b)
輸出
LCM of 10 and 25 is:50
在上面的程式中,我們實現了一個求兩個數最大公約數的函式。由於一對數的LCM乘以HCF等於這對數的乘積,因此LCM等於乘積除以HCF。我們聲明瞭函式hcf,它接收兩個整數作為引數並返回一個整數。在函式定義中,我們接收整數引數a和b,並使用引數b和a%b遞迴呼叫自身,直到達到基例,其中第二個引數為零,我們返回第一個引數,它將是這兩個數的最大公約數。現在我們得到了兩個數的最大公約數,我們使用實用函式lcm4,它接收兩個整數並透過將這兩個數的乘積除以它們的最大公約數來返回LCM。我們在主函式中呼叫lcm4函式並列印輸出。
使用內建GCD函式求LCM
示例
使用內建gcd函式求LCM的程式
main :: IO() main = do let a = 10 let b = 23 -- print the lcm by invoking the inbuilt function gcd putStr("LCM of "++ (show a) ++ " and "++ (show b) ++" is:") print (div (a*b) (gcd a b))
輸出
LCM of 10 and 23 is:230
在上面的程式中,我們宣告並初始化了要計算LCM的變數。我們使用了內建函式gcd,它接收兩個整數作為引數並返回這兩個數的最大公約數。我們知道一對整數的LCM乘以HCF等於這對整數的乘積。因此,我們計算乘積除以HCF來生成LCM,最後,我們列印計算出的輸出。
結論
在本教程中,我們討論了五種不同的方法來實現使用內建函式和自定義函式在Haskell程式語言中求兩個數最小公倍數的程式。
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP