わたなべです.

EGUCHI Osamu <eguchi / shizuokanet.ne.jp> writes:

:素数の集合から消去すると言う点で、篩のアルゴリズムだと思いますが、
:オリジナルは除剰算を行なわない事が、肝だったように思います。
:#最適化ってこれの事ですか? ^^)l

だいたいそうです. 考えかたもえぐちさんのとほぼ同じです.
delete はコストが高いってのもありますね.

# sieve of Eratosthenes
max = Integer(ARGV.shift || 100)
sieve = []
for i in 2 .. max
  sieve[i] = i
end

for i in 2 .. Math.sqrt(max)
  (i+i).step(max, i) do |j|
    sieve[j] = nil
  end
end
puts sieve.compact.join ", "

true ではなく値そのもの, false ではなく nil を使うのがミソ.
compact が使えます.

-- 
わたなべひろふみ