原です。

In [ruby-math:00855]

NArray が面白いのでちょっと解説すると、、

>require 'narray'
>Max = 1000 # real maximum of this program is 1290
>a = NArray.int(Max,Max).indgen!
>x = a / Max + 1
>y = a % Max + 1
>pair = x * x * x + y * y * y
>sorted = pair.sort
>index  = pair.sort_index
>
>f =  ( sorted[0...-4].eq sorted[3...-1] ).where
>for i in (0...f.size)
>  printf("%d = ",sorted[f[i]])
>  printf("%d ^ 3 + %d ^ 3 = %d ^3 + %d ^3\n",
>	x[index[f[i]]]  ,y[index[f[i]]],
>	x[index[f[i]+1]],y[index[f[i]+1]])
>end

まず NArray.int(Max,Max) は Max * Max の整数行列の生成。
indgen! というのはこの場合 0...(Max*Max) の整数を Max づ
つ区切って Max * Max の配列に並べます。

で、この Narray の四則 +-*/ は、要素毎なので、x = a / Max + 1
は各行が行番号を表す行列、y = a % Max + 1 は各列が列番号を表
す行列になり、pair = x * x * x + y * y * y で、3 乗和の行列が
できます。pair.sort は、各成分を小ささの順に1次元に並べます。
pair.sort_index はその並べ替えをインデックスの並べ替えとして
出力します。その後は、、、

その後がなかなかすごいのですが、

>f =  ( sorted[0...-4].eq sorted[3...-1] ).where

が

  f =  ( sorted[0...-2].eq sorted[1...-1] ).where

でも

  f =  ( sorted[0...-3].eq sorted[2...-1] ).where

でも無いところがすばらしい思いつき。


x**3 + y**3 だけでいいのに、y**3 + x**3 も計算させてしまったりして、
処理をまとめて超富豪プログラミングをしたものが圧倒的に早いというの
がなかなか、、、NArray の世界です。

ところで、この方法はやはり、x**3 + y**3 = 2 * z**3 となる整数が存在
しないと仮定してますね。それは正しいのですが、それを仮定しない方法
を考えてみました。

require "narray"
N = 170
a = NArray.int(N, N).indgen!
x = a / N + 1
y = a % N + 1
s = x <= y
x = x[s]
y = y[s]
pair = x*x*x + y*y*y
sorted = pair.sort
index = pair.sort_index
f =  ( sorted[0...-2].eq sorted[1...-1] ).where
for i in (0...f.size)
  printf("%d = ",sorted[f[i]])
  printf("%d ^ 3 + %d ^ 3 = %d ^3 + %d ^3\n",
	x[index[f[i]]]  ,y[index[f[i]]],
	x[index[f[i]+1]],y[index[f[i]+1]])
end

ここでは x <= y で、行番号より列番号が大きくなるかどうかを
行列として生成し、x = x[s], y = y[s] でその場所の数字を配列
として取り出しています。

こちらは、x**3 + y**3 を計算したら y**3 + x**3 は計算しない
で済ましていて、やはりより速いようです。