新井です。

そういえば、1.6 の hash.c rb_any_hash() で、

	if (!FIXNUM_P(hval)) {
	    hval = rb_funcall(hval, '%', 1, INT2FIX(65439));
	}

となってますが、65439 というのはどこから来た数値なんでしょう?

$ ruby -rmathn -e 'p 65439.prime_division'
[[3, 2], [11, 1], [661, 1]]

っと素数じゃないですよねえ。1.7 では、以下のように昔のまま
です。

        DEFER_INTS;
        hval = rb_funcall(a, id_hash, 0);
        if (FIXNUM_P(hval)) {
            hval %= 536870917;
        }
        else {
            hval = rb_funcall(hval, '%', 1, INT2FIX(536870917));
        }
        ENABLE_INTS;

$ ruby -rmathn -e 'p 536870917.prime_division'
[[11, 1], [103, 1], [613, 1], [773, 1]]

こっちも素数じゃない。以前、st.c の primes を素数に直して頂
きましたがこっちも直した方がいいんじゃないかな?

--
新井康司 (Koji Arai)