Haskell 程序检查数字是否为素数

haskellserver side programmingprogramming更新于 2025/5/25 14:22:17

要检查给定数字是否为素数,我们将在 Haskell 中使用 mod 函数和列表推导方法。

什么是素数?

素数是大于 1 的正整数,只能被 1 和其本身整除。换句话说,素数不能写成两个较小正整数的乘积,除了 1 和其本身。例如,前几个素数是:2、3、5、7、11、13、17、19、23 和 29。

算法

  • 步骤 1 - 定义 isPrime 函数。

  • 步骤 2 - 程序将从 main 函数开始执行。 main() 函数对程序有完全的控制权。它写为 main = do。在主函数中,一个数字被传递给 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 函数,或者使用列表推导来检查传递给函数的整数是否为素数。


相关文章