【问题标题】:Haskell function that return the next prime number after given n在给定 n 后返回下一个素数的 Haskell 函数
【发布时间】:2016-06-18 18:48:52
【问题描述】:

学习 Haskell。尝试编写一个名为nextPrime n 的函数,该函数将返回n 之后的下一个素数。

我有以下:

-- Generate a list of all factors of n
factors :: Integral a => a -> [a]
factors n = [x | x <- [1..n], n `mod` x == 0]

-- True iff n is prime
isPrime :: Integral a => a -> Bool
isPrime n = factors n == [1, n]

到目前为止,功能设置如下:

nextPrime :: Integral a => a -> a
nextPrime n = 

我想我可能必须做一个 while 循环,但不确定如何做。我对函数式编程完全陌生。任何帮助表示赞赏

【问题讨论】:

  • 看看dropWhilehead
  • find 也是一个选项^^
  • 如果这是家庭作业,您应该尝试使用递归。作业的第一步应该是清楚地考虑你要做什么并声明性地说明它:“如果 n isPrime,n 之后的下一个素数是 n,否则它是 n+1 之后的下一个素数”(这可能是也可能是不完全是您所说的“n 之后的下一个素数”)。第二步是翻译成haskell,这涉及到学习一些基本语法(提示:“is”变成=)。有关资源,请参阅 SO 上 haskell 标记的信息部分。
  • 我理解它的方式 n 之后 意味着nextPrime n &gt; n 在任何情况下都是nextPrime n = n+1 IIF n+1 is prime
  • @jberryman "nextPrime after n is n if n isPrime" n 绝对不在 n 之后,n 之后的 nextPrime 应始终以 n + 1 开始搜索。

标签: haskell


【解决方案1】:

我假设nextPrime n 的意思是“给我第一个大于 n 的素数”。

这是一个想法:

nextPrime :: Integral a => a -> a
nextPrime n = nextPrime' (n + 1)
 where nextPrime' m = ...

您想填写nextPrime' 的空白。这里有一个提示:

fun n = if n <= 0 
        then 0 
        else n + fun (n - 1)

这是一个递归函数,它计算总和 1 + 2 + 3 + ... + n,尽管它从 n 开始并从那里向下。 nextPrime' 将不得不上升。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-10-27
    • 2011-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多