【问题标题】:Find prime numbers high order function [duplicate]查找素数高阶函数
【发布时间】:2014-02-17 08:55:05
【问题描述】:

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

代码:

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

但是这段代码错误,丑陋,性能如此糟糕,我怎样才能做到真正实用的方式呢?

【问题讨论】:

  • @tenshi 谢谢,我应该删除我的问题吗?
  • 不,我认为搜索关键字对其他人会有所帮助

标签: function scala functional-programming primes


【解决方案1】:

我用这个解决了同样的任务:

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 primesBelow(n): ... xs match { ... case x :: rest => IF (x*x > n) THEN primes.reverse.append(xs) ELSE iter(...) } ...,速度会快得多。 :)
猜你喜欢
  • 2012-10-15
  • 2023-01-11
  • 1970-01-01
  • 2016-05-07
  • 2019-09-22
相关资源
最近更新 更多