From: Bertram Scharpf Date: 2009-07-25T08:04:12+09:00 Subject: Re: using until Hi, Am Samstag, 25. Jul 2009, 05:27:07 +0900 schrieb Lloyd Linklater: > I am writing a little thing to find all the prime numbers to a million. Here is one that works: def sieve max a = Array.new max do |i| i end a.shift a.shift i = 0 while (t = c = a[i]) do yield c if block_given? while (t += c) <= max do a.delete t end i += 1 end a end And this one is fast enough: def sieve max if block_given? then h = {} 2.upto max do |c| unless h[ c] then yield c t = c while (t += c) <= max do h[ t] = true end end c += 1 end else a = [] sieve max do |p| a.push p end end end Bertram -- Bertram Scharpf Stuttgart, Deutschland/Germany http://www.bertram-scharpf.de