Haskell程式:判斷一個數能否表示為兩個素數之和


在本例中,我們將使用使用者自定義函式在Haskell中檢查一個數能否表示為兩個素數之和。在第一個例子中,我們將使用(isPrime)函式和primeSum函式;在第二個和第三個例子中,我們將使用(isPrime)函式和isSumOfTwoPrimes函式。

在下面的例子中,isPrime函式檢查給定數字是否為素數。它首先檢查數字是否小於或等於1,如果是,則返回False。然後它檢查數字是否為2,如果是,則返回True。如果數字是偶數,則返回False。否則,它檢查數字是否可以被3到數字平方根之間的任何整數整除。如果可以,則返回False,否則返回True。

primeSum函式檢查給定數字能否表示為兩個素數之和。它使用any函式來檢查2到給定數字減2之間的任何數字與另一個素數相加是否等於給定數字。

演算法

  • 步驟1 - 定義使用者自定義isPrime函式為:

isPrime n
   | n <= 1 = False
   | n == 2 = True
   | even n = False
   | otherwise = not $ any (\x -> n `mod` x == 0) [3,5..(floor . sqrt . fromIntegral) n].

並定義使用者自定義primeSum函式為:primeSum n = any (\x -> isPrime x && isPrime (n-x)) [2..(n-2)]。

  • 步驟2 - 程式執行將從main函式開始。main()函式控制整個程式的執行。它被編寫為main = do。在main函式中,我們將值賦給變數num,然後呼叫primeSum函式。如果該數可以表示為兩個素數之和,則返回True。

  • 步驟3 - 初始化名為“num”的變數。它將儲存需要表示為兩個素數之和的數值。

  • 步驟4 - 函式呼叫後,使用'print'函式將結果列印到控制檯。

示例1

在這個例子中,我們將看到如何檢查一個數能否表示為兩個素數之和。這可以透過使用使用者自定義函式來實現。

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

primeSum :: Integer -> Bool
primeSum n = any (\x -> isPrime x && isPrime (n-x)) [2..(n-2)]

main :: IO ()
main = do
   let num = 28
   print (primeSum num)

輸出

True

示例2

在這個例子中,我們將看到如何檢查一個數能否表示為兩個素數之和。這可以透過使用使用者自定義函式來實現。這裡,我們定義了一個輔助函式isPrime,它將檢查一個數是否為素數,然後使用isSumOfTwoPrimes函式檢查2到n-2之間的任何數是否可以與一個素數相加等於n。

isPrime :: Integer -> Bool
isPrime n = n > 1 && all (\x -> n `mod` x /= 0) [2..n-1]

isSumOfTwoPrimes :: Integer -> Bool
isSumOfTwoPrimes n = any (\x -> isPrime x && isPrime (n - x)) [2..n-2]

main :: IO ()
main = do
   let num = 28
   print (isSumOfTwoPrimes num)

輸出

True

示例3

在這個例子中,isSumOfTwoPrimes函式接收一個整數n作為輸入,並檢查2到n-2之間的任何數是否可以與一個素數相加等於n。isPrime函式用於檢查一個數是否為素數。any函式用於檢查列表中的任何元素是否滿足特定條件。如果找到這樣的數,則函式返回True,否則返回False。

isPrime :: Integer -> Bool
isPrime n = n > 1 && all (\x -> n `mod` x /= 0) [2..n-1]

isSumOfTwoPrimes :: Integer -> Bool
isSumOfTwoPrimes n = any (\x -> isPrime (n - x) && isPrime x) [2..n-2]

main :: IO ()
main = do
   let num = 28
   print (isSumOfTwoPrimes num)

輸出

True

結論

在Haskell中,要檢查一個數能否表示為兩個素數之和,我們可以使用不同的方法和使用者自定義函式。

更新於:2023年3月27日

瀏覽量:137

開啟你的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.