わたなべです. Shin-ichiro Hara <sinara / blade.nagaokaut.ac.jp> writes: :(原6) :max = Integer(ARGV.shift || 100) :max2 = (max-3)/2 :primes = [2] :sieve = (0 .. max2).to_a :for i in 0 .. (Math.sqrt(max)-3)/2 : next unless sieve[i] : k = (i<<1)+3 : (k*(i+1)+i).step(max2, k) do |j| : sieve[j] = nil : end :end :primes.concat sieve.compact.collect { |i| (i<<1)+3 } :puts primes.join(", ") : :するとある程度 max が大きいと(稲葉1)の大体3倍のスピード :が出るようです。 profile を取ってみると Float#< が結構上位にいるので for i in 0 .. (Math.sqrt(max)-3)/2 を for i in 0 .. Integer((Math.sqrt(max)-3)/2) にするとちょっと速くなります(微々たるもんだけど). -- わたなべひろふみ