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 程式語言中實現一個程式來檢查輸入數字是否為素數。

更新於: 2022-12-14

353 次瀏覽

開啟你的 職業生涯

透過完成課程獲得認證

立即開始
廣告

© . All rights reserved.