diff options
Diffstat (limited to 'sample/sieve.rb')
| -rw-r--r-- | sample/sieve.rb | 22 |
1 files changed, 9 insertions, 13 deletions
diff --git a/sample/sieve.rb b/sample/sieve.rb index 03ff8a67f4..e0bb21d640 100644 --- a/sample/sieve.rb +++ b/sample/sieve.rb @@ -1,18 +1,14 @@ # sieve of Eratosthenes +max = Integer(ARGV.shift || 100) sieve = [] -if ! max = ARGV.shift; max = 100; end -max = max.to_i +for i in 2 .. max + sieve[i] = i +end -print "1" -for i in 2 .. max - begin - for d in sieve - fail if i % d == 0 - end - print ", " - print i - sieve.push(i) - rescue +for i in 2 .. Math.sqrt(max) + next unless sieve[i] + (i*i).step(max, i) do |j| + sieve[j] = nil end end -print "\n" +puts sieve.compact.join(", ") |
