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整除的元素,因此第一个元素将是最小公倍数。我们在主函数中调用该函数并打印返回的输出。
Explore our latest online courses and learn new skills at your own pace. Enroll and become a certified expert to boost your career.
使用递归函数求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编程语言中求两个数最小公倍数的程序。