import java.lang.Integer._
import java.lang.Math._
import scala.collection.mutable.ArrayBuffer
class ScalaPrimes(val size:Int){
val primes = new ArrayBuffer[Int]
var cnt = 0
init
def last = primes(primes.size - 1)
private
def init {
var i = 2
val max = calcSize
val nums = new ArrayBuffer[Boolean]
for (i<-0 until max) nums += true
while (i < max && cnt < size){
val p = i
if (nums(i)){
primes += p
cnt += 1
(p until max/p).foreach((j) => nums.update(p*j,false))
}
i += 1
}
}
def calcSize = {
var max = 2
while ( (max/log(max)) < size && max < MAX_VALUE && max > 0) {
max *= 2
}
max
}
}
Saturday, May 09, 2009
JavaOne Talk: Scala Prime Sieve
See this post for an explanation on why this code is being shown and what kind of responses would be useful. See this post for the Java algorithm to compare against.
No comments:
Post a Comment