benchmark/bench/nsieve.groovy (42 lines of code) (raw):

/* * The Computer Language Benchmarks Game * http://shootout.alioth.debian.org/ * * contributed by Pilho Kim */ def countSieve(m, primes) { def i, k def count = 0 i = 2 while (i <= m) { primes[i] = true i++ } i = 2 while (i <= m) { if (primes[i]) { k = i + i while (k <= m) { primes[k] = false k += i } count++ } i++ } return count } def padNumber(number, fieldLen) { def bareNumber = "" + number def numSpaces = fieldLen - bareNumber.length() def sb = new StringBuffer(' ' * numSpaces) sb.append(bareNumber) return sb.toString() } def n = 2 if (args.length > 0) n = args[0].toInteger() if (n < 2) n = 2 def m = (1 << n) * 10000 def flags = new boolean[m+1] [n, n-1, n-2].each { def k = (1<<it) * 10000 def s1 = padNumber(k, 8) def s2 = padNumber(countSieve(k, flags), 9) println("Primes up to $s1$s2") }