>原です。
>
>>ruby 初心者の近岡です。
>>
>>! ==== 引用ここから ====
>>! A**3+B**3=C**3+D**3 (C>A>B>D)となる整数の組を100組求める
>>! X=A**3+B**3, S=C+D , T=C*D , U=C-D のとき
>>! S≡A+B (mod 6) , A+B > S > X^(1/3)
>>! T = C*D = (S**3-X)/(3S) is a integer.
>>! U = C-D = sqr(S**2-4*T) is a integer.
>
>なるほど、A**3 + B**3 == C**3 + D**3 なら A + B ≡ C + D (mod 6)
>を使うわけですね。これはかなりの高速化に繋がりますね。
>
>>BASICなら30分もかからずできたのですが…
>>まだ、rubyで作るだけの能力がありません。
>
>不肖、私メが Ruby 化させていただきます。

ありがとうございます。
# 昨日、帰宅してからマニュアル片手に ruby に移植して見たのですが、
# どこかで無限ループに陥ってしまったようで、うまく行きませんでした。
# 私の20年にわたるプログラミング言語暦は、
#   Pascal → BASIC → C → AWK 
# ときて、Perlに挫折して、次はRubyに兆戦中。

2番目のwhileループ
   whille b<a
     中略
     b=b+1
   end
は、
  (1..(a-1)).each { |b| # ←だったかな。構文がなかなか覚えられない。
     中略
  }
と置きかえられますが、ここだけ while でないのも変ですね。

>a=1
>cnt=0
>while cnt<100
>  b=1
>  while b<a
>    x=a**3+b**3
>    x3=x**(1.0/3)
>    s=a+b-6        # S≡A+B (mod 6)
>    while s>x3
>      if (s**3-x).modulo(3*s) == 0 then
>        t=(s**3-x)/(3*s)
>        u=Integer(Math.sqrt(s*s-4*t))
>        if s*s-u*u==4*t then
>          cnt=cnt+1
>          c=(s+u)/2
>          d=(s-u)/2
>          print cnt,x,"=",a,"**3 +",b,"**3 =",c,"**3 +",d,"**3","\n"
>        end
>      end
>      s=s-6
>    end
>    b=b+1
>  end
>  a=a+1
>end
>
>#1.0/3 を 1/3 と書いてはまったのは内緒。

私は、rubyに移植する場合、
>    x3=x**(1.0/3)
の部分を x3=(exp(log(x)/3)).floor としていました。

0----+----1----+----2----+----3----+----4----+----5----+----6
近岡 宣吉  Chikaoka, Nobuyoshi
富山県立高岡西高等学校(数楽科)
 E-mail : chikaoka-nobuyoshi / tym.ed.jp