元々の不定方程式 n=(x+y+z)(1/x+1/y+1/z) と似た形の式、
x/y+y/z+z/x=n
について、-100 ≤ n ≤ 100 の範囲で整数解を探してみる。
この式は x, y, z について対称ではないので、
0 < |x| ≤ |y| ≤ |z|
とは、仮定できない。x, y, z の順列 6 通りについて、符号 4つ、
(x,y,z)
(-x,y,z)
(x,-y,z)
(x,y,-z)
計24通りを調べる必要がある。
... と一見思えるが、もう少し減らすことができる。
確かに x/y+y/z+z/x は対称ではないが、x,y,z の順に cyclic なので、
(x,y,z), (y,z,x), (z,x,y) の3つは同等
(z,y,x), (x,z,y), (y,x,z) の3つは同等
となる。よって、先頭の2つ、(x,y,z), (z,y,x) だけを調べればよい。
よって、しらみつぶし探査を行う場合、n=(x+y+z)(1/x+1/y+1/z) の 6倍ではなく、
2倍の時間で済む。
要するに、3次の対称群の6個の元のうち、
互換で類別されるどちらかの類の代表元についてのみ調べればよい、
ということ。
プログラムは以下のとおり。
10 ' xyyzzx.ub : x/y+y/z+z/x=n 20 for Z=1 to 1000 30 for Y=1 to Z 40 for X=1 to Y 50 if and{X=Y,Y=Z} then 70 else R=fnSub(X,Y,Z) 60 if and{X=Y,Y=Z} then 70 else R=fnSub(X,Z,Y) 70 if or{X=Y,X=Z} then 90 else R=fnSub(-X,Y,Z) 80 if or{X=Y,X=Z} then 90 else R=fnSub(-X,Z,Y) 90 if or{X=Y,Y=Z} then 110 else R=fnSub(X,-Y,Z) 100 if or{X=Z,Y=Z} then 110 else R=fnSub(X,-Z,Y) 110 if or{X=Z,Y=Z} then 130 else R=fnSub(X,Y,-Z) 120 if or{X=Y,Y=Z} then 130 else R=fnSub(X,Z,-Y) 130 next X 140 next Y 150 next Z 160 end 170 fnSub(X,Y,Z) 180 N=X//Y+Y//Z+Z//X:if den(N)>1 then return(0) 190 if N=0 then return(0) 200 if abs(N)>1000 then return(0) 210 if gcd(X,Y,Z)>1 then return(0) 220 print N;":";X;",";Y;",";Z 230 return(0)
実行結果は以下のとおり。
-100 ≤ n ≤ -1 に対する解
1 ≤ n ≤ 100 に対する解
n= -4 に対する解、(x,y,z) = (-1,2,4), (1,2,-4)
は、一見、同値解のように見えるが、これらは別の同値類に属する。
一般式
-n^2 : (1, n, -n^2), (-1, n, n^2)
が成り立つ。
n=(x+y+z)(1/x+1/y+1/z) の場合と同様、楕円曲線上の有理点を求めることにより、
x/y+y/z+z/x=n の整数解を求めることができる。
与えられた不定方程式を、u/v+v+1/u=n と変形し、双有理写像、
X = -u
Y = uv
により、楕円曲線 E
E : Y2+nXY=X3
に双有理同値となる。逆向きの写像は、
u = -X
v = -Y/X
によって与えられる。
計算結果は下記のとおり。
-100 ≤ n ≤ -1 に対する解
1 ≤ n ≤ 100 に対する解
n = -48 : (x,y,z) = (72072752816411426700, 33132848506525529596688, -2507202774146263930905)
n = 62 : (x,y,z) = (4467832378776170000, -51609086900999886977, 278221158496143039700)
等を求めることができた。 これらは、最初のプログラムでは、まず発見することができない。
前 | この章の目次 |
---|