2014-01-26 51 views
0

我想使用集合函數查找素數。我從1到10000,然後生成數字我決定採取先數量從2日開始,我們將其命名爲X和與-1替換或刪除其中X%Y === 0是X.查找素數高階函數

代碼後的任何數字:

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

但這段代碼錯了,醜陋,有這麼糟糕的表現,我該如何做到真正的功能方式?

+0

@tenshi謝謝你,我要刪除我的問題嗎? –

+0

不,我認爲它可以爲其他人,因爲搜索關鍵詞 – tenshi

回答

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 
} 
+1

有用的是多*多*更快,如果'iter'停在開方:'高清primesBelow(N):... XS匹配{... case x :: rest => IF(x * x> n)THEN primes.reverse.append(xs)ELSE iter(...)} ...'。 :) –