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