Function 求素数高阶函数
我想用集合函数找到素数。我生成从1到10000的数字,然后我决定从2开始取第一个数字,让我们把它命名为X,并用-1替换它,或者删除其中X%Y==0y是X之后的任何数字 代码: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
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(…)}…
:)