Haskell 程式用於檢查輸入數字是否為素數
本教程討論了編寫一個程式,以檢查輸入數字在 Haskell 程式語言中是否為素數。Haskell 是一種宣告式、強型別和函數語言程式設計語言。Haskell 中的計算是數學函式。
素數是指只有 1 和自身兩個因數的數。注意 1 既不是素數也不是合數,因為它只有一個因數。例如,3 是一個素數,因為它只有兩個因數 1 和 3 本身。
在本教程中,我們將看到:
- 使用遞迴函式檢查數字是否為素數的程式。
- 使用列表推導式檢查數字是否為素數的程式。
示例 1
使用遞迴函式檢查數字是否為素數的程式
-- function declaration
isPrime :: Int->Int->Bool
-- function definition
-- base case
isPrime 1 i = False
isPrime n i = if(i==n)
then True
else if ((mod n i) == 0)
then False
else isPrime n (i+1)
main :: IO()
main = do
-- declare and initialize variables
let n = 23
-- invoking the function isPrime
let status = isPrime n 2
-- print the status
if (status==True)
then print ("The number " ++ show n ++ " is a prime number")
else print ("The number " ++ show n ++ " is not a prime number")
輸出
"The number 23 is a prime number"
在上述程式中:
我們聲明瞭一個名為 isPrime 的函式,它接受兩個整數引數並返回一個布林值。在其函式定義中,它接受兩個整數引數 n 和 i,其中 n 是要計算素數狀態的數字,i 是用於遞迴的迭代變數。
該函式將 n 的值與 i 的值進行比較。如果 n 的值等於 i,則控制權轉移到 then 程式碼塊,該程式碼塊返回 False 值。
如果 n 的值不等於 i,則控制權轉移到 else 程式碼塊,該程式碼塊檢查數字 n 是否能被 i 整除。如果 n 能被 i 整除,則函式返回 false,即數字 n 在 1 和 n 之間有一個除數,因此返回 false。如果 n 不能被 i 整除,則函式使用引數 n 和 (i+1) 對自身進行遞迴呼叫。
遞迴呼叫會一直執行,直到迭代變數 I 達到 n 的值,表示該數字是素數。該函式的基本情況定義為:如果 n 的值為 1,則函式返回 False,因為 1 既不是素數也不是合數。
在主函式中,為 n 初始化了一個變數,並使用引數 n 和 1 呼叫 isPrime 函式,其中第二個引數是用於遞迴的迭代值。返回的輸出載入到變數 status 中。最後,檢查 status 的值,如果 status 的值為 true,則程式列印“該數字是素數”,否則程式列印“該數字不是素數”。
注意 - show 函式接受一個數字作為引數,並返回該數字的解析字串。“++”是 Haskell 中用於連線字串的運算子。
示例 2
使用列表推導式檢查數字是否為素數的程式
-- function declaration
isPrime :: Int->Bool
-- function definition
-- base case
isPrime 1 = False
isPrime n = and [(mod n i)/=0 | i<-[2..(n-1)]]
main :: IO()
main = do
-- declare and initialize variables
let n = 23
-- invoking the function isPrime
let status = isPrime n
-- print the status
if (status==True)
then print ("The number " ++ show n ++ " is a prime number")
else print ("The number " ++ show n ++ " is not a prime number")
輸出
"The number 23 is a prime number"
在上述程式中:
我們聲明瞭一個名為 isPrime 的函式,它接受一個整數作為引數並返回一個布林值。在其函式定義中,該函式接受一個引數 n,其中 n 是要檢查素數狀態的數字。在函式中,透過生成從 2 到 n-1 的數字並透過將數字 n 除以 i 並將計算結果與 0 進行比較來返回數字作為布林值,從而生成一個布林值列表。
列表推導式生成一個布林值列表,表示 1 和 n-1 之間的數字。如果數字可以被 i 整除,則相應的布林值為 False,否則相應的布林值為 True。
我們呼叫了一個函式,該函式接受一個布林值列表作為引數,並返回列表中所有布林值的累積操作。
如果列表中的所有值都為 true,則此函式返回 true,即數字在 1 和 n 之間沒有除數。得出結論,該數字是一個素數。否則,如果列表中的任何值為 False,則該函式返回 true,即數字在 1 和 n 之間的範圍內有一個除數。
該函式的基本情況定義為:如果 n 的值為 1,則函式返回 False,因為 1 既不是素數也不是合數。
在主函式中,為 n 初始化了一個變數,並使用引數 n 呼叫 isPrime 函式。返回的輸出載入到變數 status 中。最後,檢查 status 的值,如果 status 的值為 true,則程式列印“該數字是素數”,否則程式列印“該數字不是素數”。
結論
在本教程中,我們討論了在 Haskell 程式語言中實現一個程式來檢查輸入數字是否為素數。
資料結構
網路
關係資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C 語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP