summaryrefslogtreecommitdiff
path: root/sample/sieve.rb
diff options
context:
space:
mode:
Diffstat (limited to 'sample/sieve.rb')
-rw-r--r--sample/sieve.rb22
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(", ")