100までの整数から素数を列挙せよ
普通に実装。(追記:不等号、間違っていたので直しました)。
def prime(n = 100, &block) is_prime = Array.new(n + 1, true) is_prime[0] = false is_prime[1] = false (2..n).each do |p| next unless is_prime[p] block.call(p) k = p + p while k <= n is_prime[k] = false k += p end end is_prime end prime(1000000) do |p| print "#{p}, " end
追記:最後にis_primeを戻しているのは後で調べ物をするときのためです。たとえば999907は素数かな?
def nil.call(*a) end def prime(n = 100, &block) is_prime = Array.new(n + 1, true) is_prime[0] = false is_prime[1] = false (2..n).each do |p| next unless is_prime[p] block.call(p) k = p + p while k <= n is_prime[k] = false k += p end end is_prime end a = prime(1000000) p a[999907] #=> true