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.