使用函数在 Haskell 中显示区间内的素数


在 Haskell 中,我们可以使用用户定义的函数以及 filter 函数和递归来显示区间内的素数。在第一个示例中,我们将使用用户定义的 (isPrime) 函数与 (primeInRange a b = filter isPrime [a..b] ) 函数,而在第二个示例中,我们将使用带有基本情况和递归情况的递归。

算法

  • 步骤 1 − 导入 Data.List 库。

  • 步骤 2 − 定义用户定义的 isPrime 函数,如下所示:

  • 步骤 3 − 程序执行将从 main 函数开始。main() 函数控制整个程序。它被写成 main = do。

  • 步骤 4 − 初始化名为“lower”和“upper”的变量。它将保存要打印素数的范围。

  • 步骤 5 − 在调用函数后,使用 'print' 函数将定义范围内的结果素数打印到控制台。

示例 1

在这个例子中,我们将了解如何使用用户定义的函数和 filter 函数来显示两个区间之间的素数。

import Data.List (find)

isPrime :: Integer -> Bool
isPrime n
   | n <= 1 = False
   | n == 2 = True
   | even n = False
   | otherwise = all (\x -> n `mod` x /= 0) [3,5..(n-1)]

primeInRange :: Integer -> Integer -> [Integer]
primeInRange a b = filter isPrime [a..b]

main :: IO ()
main = do
        let lower = 10
            upper = 20
        print (primeInRange lower upper)

输出

[11,13,17,19]

示例 2

在这个例子中,我们将了解如何使用用户定义的函数和递归来显示两个区间之间的素数。

import Data.List (find)

isPrime :: Integer -> Bool
isPrime n
   | n < 2 = False
   | n == 2 = True
   | n `mod` 2 == 0 = False
   | otherwise = all (\x -> n `mod` x /= 0) [3,5..(floor . sqrt . fromIntegral $ n)]

primeInRange :: Integer -> Integer -> [Integer]
primeInRange a b
   | a > b = []
   | isPrime a = a : primeInRange (a+1) b
   | otherwise = primeInRange (a+1) b

main :: IO ()
main = do
        let lower = 2
            upper = 30
        print (primeInRange lower upper)

输出

[2,3,5,7,11,13,17,19,23,29]

结论

素数是一个大于 1 的自然数,不能由两个较小的自然数相乘得到。在 Haskell 中,要显示区间内的素数,我们可以使用用户定义的函数以及 filter 函数和递归。

更新于: 2023年3月13日

134 次查看

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告

© . All rights reserved.