Function 求素数高阶函数

Function 求素数高阶函数,function,scala,functional-programming,primes,Function,Scala,Functional Programming,Primes,我想用集合函数找到素数。我生成从1到10000的数字,然后我决定从2开始取第一个数字,让我们把它命名为X,并用-1替换它,或者删除其中X%Y==0y是X之后的任何数字 代码: val list = (2 to 10000) println(list.map(x => list.filter(y => y % x == 0))) 但这段代码错了,难看,有这么差的性能,我怎样才能做到真正的功能性呢 我用这个解决了同样的问题: import scala.annotation.tailre

我想用集合函数找到素数。我生成从1到10000的数字,然后我决定从2开始取第一个数字,让我们把它命名为X,并用-1替换它,或者删除其中X%Y==0y是X之后的任何数字

代码:

val list = (2 to 10000)
println(list.map(x => list.filter(y => y % x == 0)))

但这段代码错了,难看,有这么差的性能,我怎样才能做到真正的功能性呢

我用这个解决了同样的问题:

import scala.annotation.tailrec

def primesBelow(x: Int): List[Int] = {
  @tailrec
  def iter(primes: List[Int], xs: List[Int]): List[Int] = xs match {
    case Nil => primes
    case x :: xs => iter(x :: primes, xs.filter(_ % x != 0))
  }
  iter(Nil, (2 until x).toList).reverse
}

@谢谢,我应该删除我的问题吗?不,我认为这对其他人会有帮助,因为搜索关键字。如果
iter
停在sqrt:
def primes下面(n):。。。xs match{…case x::rest=>如果(x*x>n)那么primes.reverse.append(xs)ELSE iter(…)}…
:)