Fix for JRUBY-2882. Handle error messages related to constructors better
[jruby.git] / bench / yarv / bm_so_nsieve.rb
blob59aead5893830f6345ce70bf9921b5784e9ceee4
1 # The Computer Language Shootout\r
2 # http://shootout.alioth.debian.org/\r
3 #\r
4 # contributed by Glenn Parker, March 2005\r
5 # modified by Evan Phoenix, Sept 2006\r
6 \r
7 def sieve(m)\r
8   flags = Flags.dup[0,m]\r
9   count = 0\r
10   pmax = m - 1\r
11   p = 2\r
12   while p <= pmax\r
13     unless flags[p].zero?\r
14       count += 1\r
15       mult = p\r
16       while mult <= pmax\r
17         flags[mult] = 0\r
18         mult += p\r
19       end\r
20     end\r
21     p += 1\r
22   end\r
23   count\r
24 end\r
26 n = 9 # (ARGV[0] || 2).to_i\r
27 Flags = ("\x1" * ( 2 ** n * 10_000)).unpack("c*")\r
29 n.downto(n-2) do |exponent|\r
30   break if exponent < 0\r
31   m = (1 << exponent) * 10_000\r
32   # m = (2 ** exponent) * 10_000\r
33   count = sieve(m)\r
34   printf "Primes up to %8d %8d\n", m, count\r
35 end\r