豊福です。

近岡さん
>   となるので、c は3次方程式
>         2*c**3 - 3*m3*c**2 + 3*m3**2*c -m3**3-a**3+b**3 == 0
>     の1個しかない実数解です。

  あ、そうですね。全然そのことは意識していませんでした。

>   これを利用すれば……(シンプルじゃなくなるのは確かですね)

  3次方程式を解くのはちょっとあれですが、ループを早めに抜け
てもいいケースに気づいたので書き直しました。
解100個求める時間が10分の1になりました。感謝です。
降順の Range と Range::step があればもっとシンプルにかけそう
ですがないですよね。しかも手元の ruby のバージョンは 1.6.4 だし。

ついでに。
前のメールの
|   a**3 + b**3 = 2 * c**2
| の解はないということを簡単に示せるかな?
の「c**2」は当然ながら「c**3」のつもりでした。

aj = [[0,2,1],[1,0,2],[2,1,0]]
n = 10
m = 10
exit if (n <= 0)
while (true)
  hm = m/2
  low_a = (m+6)/4
  a = m-6
  while (a >= low_a)
    a3 = a**3
    low_b = ((m2=m-a)+3)/3
    b = m2-3; b = a-1 if (b >= a)
    while (b >= low_b)
      b3 = b**3
      break if (2*b3 <= a3)
      low_c = ((m3=m2-b)+1)/2
      c = m3-1; c = b-1 if (c >= b)
      c -= aj[c%3][(hm-b)%3]
      while (c >= low_c)
        d = m3-c
        if ((s = a3 + d**3) >= (t = b3 + c**3))
          if (s == t)
            p [s, [d,a], [c,b]] 
            exit if ((n -= 1) <= 0)
          end
          break
        end
        c -= 3
      end
      b -= 1
    end
    a -= 1
  end
  m += 2
end
---
                        豊福
                        ttoyofukujp / yahoo.co.jp