In article <87r5t9ak8m.fsf / fsij.org>,
  Tanaka Akira <akr / fsij.org> writes:

> てきとうに調べてみると、どうも prime が timeout で中断される
> と、それ以降に変な (素数でない) 値が生成されることがあるよう
> です。

> タイミングが関係するようなので、何も表示されなかったら中断し
> て繰り返し試してみてください。

Timeout::Error はどこでおこってもおかしくないわけですが、以
下のように prime.rb の特定の場所で Timeout::Error を発生させ
るようにすると、確実に再現します。

% svn diff lib/prime.rb 
Index: lib/prime.rb
===================================================================
--- lib/prime.rb        (revision 25297)
+++ lib/prime.rb        (working copy)
@@ -436,6 +436,7 @@
       lbound = orig_len*32
       ubound = new_len*32
       @table.fill(0xFFFF, orig_len...new_len)
+      raise Timeout::Error
       (3..Integer(Math.sqrt(ubound))).step(2) do |p|
        i, j = p.divmod(32)
        next if @table[i][j.div(2)].zero?
% ./ruby -Ilib -rtimeout -rprime -ve '
e = Prime.instance
begin
  e.each {|v| }
rescue Timeout::Error
end
p e.each {|v| break v if (2..Math.sqrt(v)).any?{|n| v%n == 0 } }
'     
ruby 1.9.2dev (2009-10-11 trunk 25297) [i686-linux]
259

ここで 259 は 7*37 なので、素数ではありません。
-- 
[田中 哲][たなか あきら][Tanaka Akira]