Haskell程式:判斷一個數是否為素數
為了檢查給定的數字是否為素數,我們將使用Haskell中的模運算子和列表推導方法。
什麼是素數?
素數是一個大於1的正整數,它只能被1和它本身整除。換句話說,素數不能寫成兩個較小正整數的乘積,除了1和它本身。例如,前幾個素數是:2、3、5、7、11、13、17、19、23和29。
演算法
步驟1 − 定義isPrime函式。
步驟2 − 程式執行將從main函式開始。main()函式控制整個程式。它寫成main = do。在main函式中,一個數字被傳遞給isPrime函式。函式的結果用於列印一條訊息,指示該數字是否為素數。
步驟3 − 變數“n”被初始化。它將儲存要檢查是否為素數的整數。
步驟4 − 函式呼叫後,使用‘putStrLn’語句將結果列印到控制檯。
示例1
在這個例子中,isPrime函式接收一個整數n作為輸入,並返回一個布林值,指示該數字是否為素數。該函式使用all函式來檢查從2到n的平方根向下取整的所有數字是否都不是n的約數。如果所有這些數字都不是約數,則n是素數。
isPrime :: Integer -> Bool
isPrime n = n > 1 && all (\x -> n `mod` x /= 0) [2 .. floor (sqrt (fromIntegral n))]
main :: IO ()
main = do
let n = 7
if n > 0
then if isPrime n
then putStrLn "The number is prime."
else putStrLn "The number is not prime."
else putStrLn "Invalid input. Please enter a positive integer."
輸出
The number is prime.
示例2
在這個例子中,使用mod和filter函式定義了一個isPrime函式,用於檢查傳遞的整數是否為素數。
isPrime :: Int -> Bool
isPrime n = n > 1 && (filter (\x -> n `mod` x == 0) [2..n-1] == [])
main :: IO ()
main = do
let n = 7
if n > 0
then if isPrime n
then putStrLn "The number is prime."
else putStrLn "The number is not prime."
else putStrLn "Invalid input. Please enter a positive integer."
輸出
The number is prime.
示例3
在這個例子中,對於所有其他情況,我們使用列表推導來檢查範圍[3, 5, ..., upperBound]中的任何數字是否能整除n。如果沒有這樣的數字,則n是素數,我們返回True。
isPrime :: Int -> Bool
isPrime n
| n <= 1 = False
| n == 2 = True
| even n = False
| otherwise = all (\x -> n `mod` x /= 0) [3,5..upperBound]
where upperBound = floor $ sqrt $ fromIntegral n
main :: IO ()
main = do
let n = 7
if n > 0
then if isPrime n
then putStrLn "The number is prime."
else putStrLn "The number is not prime."
else putStrLn "Invalid input. Please enter a positive integer."
輸出
The number is prime.
結論
在Haskell中,我們可以使用mod函式結合fromIntegral或filter函式,或者使用列表推導來檢查傳遞給函式的整數是否為素數。
廣告
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP