使用函式在 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.