Homeに戻る  一覧に戻る 

Integral Points of Curve: 2x(x-1)(x-2)(x-3)=y(y-1)(y-2)(y-3)


[2004.03.20]2x(x-1)(x-2)(x-3)=y(y-1)(y-2)(y-3)の整点



■Diophantus方程式
     A: 2x(x-1)(x-2)(x-3)=y(y-1)(y-2)(y-3)
の整数解x,yを求める。

この曲線Aは、16個の自明な整点
     (x,y) ∈ {0,1,2,3}×{0,1,2,3}
を持つ。

pari/gpでプログラムを作成し、|x| <= 10000の範囲で曲線Aの整点(x,y)を探すと、16個の自明な整点と4個の自明でない整点
     (-4,-5),(-4,8),(7,-5),(7,8)
が見つかる。

[pari/gpによる計算]
gp> read("./ide12.gp")
time = 20 ms.
gp>  find(10000)
[-4, 8]
[-4, -5]
[0, 3]
[0, 0]
[0, 2]
[0, 1]
[1, 3]
[1, 0]
[1, 2]
[1, 1]
[2, 3]
[2, 0]
[2, 2]
[2, 1]
[3, 3]
[3, 0]
[3, 2]
[3, 1]
[7, 8]
[7, -5]
time = 1,096 ms.
以下では、曲線Aの整点(x,y)はこれらの20個に限ることを証明する。

■曲線Aから楕円曲線E1: V2=(4U+5)(2U2-1)へ有理変換を求める。
     x(x-1)(x-2)(x-3) = {x(x-3)}{(x-1)(x-2)} = (x2-3x)(x2-3x+2) = (x2-3x+1)2-1
であるので、
     X = x2-3x+1,
     Y = y2-3y+1
とおくと、
     Y2-1 = 2(X2-1)
つまり、
     Y2 = 2X2-1
を得る。
x,yが整数ならば、X,Yも整数である。
また、xについての2次方程式
     X = x2-3x+1
つまり、
     x2-3x+1-X = 0
が整数解を持つためには、
     (-3)2-4(1-X) = 4X+5 = □
が必要十分である。
ここで、
     4X+5 = 4(x2-3x+1)+5 = (2x-3)2
である。
よって、曲線Aが整点(x,y)を持つためには、
     (2X2-1)(4X+5) = □
つまり、
     8X3+10X2-4X-5 = □
であることが必要である。
曲線Aの整点(x,y)を求めることは、楕円曲線
     E1: V2 = 8U3+10U2-4U-5
の整点(U,V)を求めることに帰着できる。
ここで、
     U = x2-3x+1,
     V = ±(2x-3)(y2-3y+1)
である。

さらに、
     u = 8U,
     v = 8V
とすると、楕円曲線
     E: v2 = u3+10u2-32u-320
を得る。
よって、楕円曲線Eの整点(u,v)を求めれば、十分である。

[pari/gpによる計算]
gp>  ee(x,y)=(4*x+5)*(2*x^2-1)-y^2
time = 2 ms.
gp>  ee(x/8,y/8)*64
time = 3 ms.
%6 = x^3 + 10*x^2 - 32*x + (-y^2 - 320)
gp>  e=ellinit([0,10,0,-32,-320])
time = 183 ms.
%7 = [0, 10, 0, -32, -320, 40, -64, -1280, -13824, 3136, 120320, 9469952, 941192/289, [5.656854249492380195206754896, -5.656854249492380195206754896, -10.00000000000000000000000000]~, 0.8597193550975993856257666087, 1.066550165938802363817706239*I, -1.894401679181166136582320382, -6.004362991559250962440141316*I, 0.9169338208401447786285202847]
gp>  ellglobalred(e)
time = 10 ms.
%8 = [1088, [1, -3, 0, 0], 8]
gp>  e1(x,y)=x^3 + 10*x^2 - 32*x + (-y^2 - 320);
time = 0 ms.
gp>  e1(x-10/3,y)
time = 3 ms.
%9 = x^3 - 196/3*x + (-y^2 - 3760/27)

■変数を取り直して、楕円曲線E: Y2=X3+10X2-32X-320の整点(X,Y)を求める。
楕円曲線Eの判別式Δ, j-不変量 j,conductor Nは、それぞれ、
     Δ = 9469952 = 215・172,
     j = 941192/289 = 23・76/172,
     N = 1088 = 26・17
である。

[pari/gpによる計算]
gp>  e.disc
time = 0 ms.
%12 = 9469952
gp>  factor([e.disc])
time = 0 ms.
%13 = [[2, 15; 17, 2]]
gp>  e.j
time = 0 ms.
%14 = 941192/289
gp>  factor([e.j])
time = 0 ms.
%15 = [[2, 3; 7, 6; 17, -2]]
gp>  ellglobalred(e)[1]
time = 3 ms.
%16 = 1088
gp>  factor([1088])
time = 0 ms.
%17 = [[2, 6; 17, 1]]

■楕円曲線Eのねじれ点群E(Q)torsは、位数2の巡回群Z/2Zであり、その生成元は、T=(-10,0)である。

     E(Q)tors = {(-10,0), O}

[pari/gpによる計算]
gp>  elltors(e,1)
time = 91 ms.
%18 = [2, [2], [[-10, 0]]]

■楕円曲線EのMordell-Weil群のrankは2であり、その生成元は、P1(-8,8), P2(-9,7)であることが分かる。
Cremonaのmwrank3により、このように求まる。
よって、
     E(Q) = Z2×Z/2Z
である。

■楕円曲線Eの全ての整点を、[4]の方法によって求める。
新しく、x=X-10/3, Y=yとする。
以下の形式
     C: y2 = f(x)
     f(x) = x^3-(196/3)x-(3760/27)
を得る。
3次方程式 f(x) = 0の最大の実数根をγとする。

任意のP ∈ E(Q)に対して、有理整数m1,m2,m0(m0=0,1)が存在して、
     P = m1P1+m2P2+m0T ------- (1)
となる。
f(x)=x3-(196/3)x-(3760/27)=0の根は、3個の実数であり、
     γ = (10+12*sqrt{2})/3 ≒ 8.990187582825713528540088230,
     γ' = (10-12*sqrt{2})/3 ≒ -2.323520916159046861873421563,
     γ''= -10/3 ≒ -6.666666666666666666666666666
である。

(X,Y)がEの整点であるとする。X = x+10/3なので、
f(X) > 0 iff (X > γ または γ'' < X < γ')

γ'' < X < γ'なる整点(X,Y)は、存在しない。

よって、X > γの範囲で、Eの整点(X,Y)を求める。
gp> read("c12.gp");
time = 4 ms.
gp> e=ellinit([0,0,0,-196/3,-3760/27])
%2 = [0, 0, 0, -196/3, -3760/27, 0, -392/3, -15040/27, -38416/9, 3136, 120320, 9469952, 941192/289, Vecsmall([1]), [Vecsmall([128, 1])], [0, 0, 0, 0, 0, 0, 0, 0]]
gp> f(x)=x^3-196/3*x-3760/27
%3 = (x)->x^3-196/3*x-3760/27
gp> polroots(f(x))
time = 2 ms.
%4 = [-6.6666666666666666666666666666666666667 + 0.E-38*I, -2.3235209161590468618734215635054589810 + 0.E-38*I, 8.9901875828257135285400882301721256476 + 0.E-38*I]~
gp> f(x+10/3)
%5 = x^3 + 10*x^2 - 32*x - 320
gp> polroots(x^3 + 10*x^2 - 32*x - 320)
time = 1 ms.
%6 = [-10.000000000000000000000000000000000000 + 0.E-38*I, -5.6568542494923801952067548968387923143 + 0.E-38*I, 5.6568542494923801952067548968387923143 + 0.E-38*I]~
gp> factor(x^3 + 10*x^2 - 32*x - 320)
%7 =
[  x + 10 1]

[x^2 - 32 1]

gp> for(x=-10,-6,y2=x^3+10*x^2-32*x-320;y=sqrtint(y2);if(y^2==y,print([
x,y])))
[-10, 0]

■不等式1
P ∈ E(Q)が(1)で表現されるとすると、
     h^(P) >= c1max{|m1|2,|m2|2}
である。

[pari/gpによる計算]
gp> p0=[0];p1=[-8+10/3,8];p2=[-9+10/3,7];t1=[-10+10/3,0];
gp> H=HH2(e,p1,p2)
time = 2 ms.
%5 =
[0.24011653552309928752566877625396862560 -0.34100873554494942256219297975038002826]

[-0.34100873554494942256219297975038002826 1.0378434166822048468473698356267862564]

gp> dd=matdet(H-x*matid(2))
%6 = x^2 - 1.2779599522053041343730386118807548820*x + 0.13291640791122212406406561170661611541
gp> ww=polroots(dd)
%7 = [0.11421431225932887028590310839487211456 + 0.E-38*I, 1.1637456399459752640871355034858827675 + 0.E-38*I]~
gp> c1=real(ww[1])
%8 = 0.11421431225932887028590310839487211456

■不等式2
     c2 = 2*max{|γ|,|γ'|,|γ''|}
とする。任意のx >= c2に対して、
     |∫x(dt/sqrt{f(t)})| <= 4*sqrt(2)|x|-1/2
となる。

[pari/gpによる計算]
gp> rr=polroots(x^3-196/3*x-3760/27);
gp> c2=2*max3(real(rr[1]),real(rr[2]),real(rr[3]))
%10 = 17.980375165651427057080176460344251295

■不等式3
新しく、u=1,v=-10/3とする。
X0を正の有理整数で、X0 > vとする。
このとき、任意のP ∈ E(Q), X(P) >= X0に対して、
     x(P) > 0,
     h^(P)-(1/2)*log x(P) <= c3
となる。

[pari/gpによる計算]
gp> c0=log(1)
%11 = 0.E-38
gp> c3=cc3(c0,e)
time = 1 ms.
%12 = 3.4292494356475472713871406146379430010

■不等式4
不等式1,2,3より、
     |φ(P)|=|(1/ω)∫x(P)(dt/sqrt{f(t)})| <= (4*sqrt(2)/ω)|x(P)|-1 <= (4*sqrt(2)/ω)exp(c3-c1M2)
を得る。

■主不等式
P ∈ E0(R) iff x(P) >= γ iff X(P) >= u2γ+v なので、不等式2,3を満たすために、
     X0 = floor(max{c2,u2γ+v,v})+1
とする。

     M2 < c3c1-1+c1-1log(4*sqrt(2))+c4c1-1(log M+c7)(log log M+c8)r+2
となる。

[pai/gpによる計算]
gp>  X0=floor(max(c2,real(rr[3])))+1
%13 = 18
gp> factor(e.j)
%14 =
[ 2  3]

[ 7  6]

[17 -2]

gp> he=log(2^3*7^6)
%15 = 13.754902436011715758883812825033608082
gp> om=omega_pe(-196/3,-3760/27)
time = 1 ms.
%16 = [1.7194387101951987712515332175054695630, 2.1331003318776047276354124789126270946*I]
gp> om1=om[1];om2=om[2];
gp> A0=AA(e,p0,he,om)
%18 = 13.754902436011715758883812825033608082
gp> A1=AA(e,p1,he,om)
time = 17 ms.
%19 = 13.754902436011715758883812825033608082
gp> A2=AA(e,p2,he,om)
time = 4 ms.
%20 = 13.754902436011715758883812825033608082
gp> eb=eeb2(e,p1,p2,A0,A1,A2,om)
time = 1 ms.
%21 = 3.6576316523271385891909714160680804473
gp> c4=cc4(2,eb,A0*A1*A2)
%22 = 13514447045141.858613056496269385136039
gp> c5=cc5(eb)
%23 = 1.2968158484323806344066761119660053766
gp> c6=cc6(c5,he)
%24 = 15.051718284444096393290488936999613459
gp> c7=cc7(c6,2,2)
%25 = 16.484887645563987012124953179915966595
gp> c8=cc8(c6,2,2)
%26 = 15.568624866954513933220488054355104382
gp> g(m)=m^2-(c3/c1+log(4*sqrt(2))/c1+(c4/c1)*(log(m)+c7)*(log(log(m))+
c8)^4)
%30 = (m)->m^2-(c3/c1+log(4*sqrt(2))/c1+(c4/c1)*(log(m)+c7)*(log(log(m))+c8)^4)
gp> gdash(m)=2*m-(c4/c1)*((1/m)*(log(log(m))+c8)^4+(log(m)+c7)*4*(log(log(m))+c8)^3*(1/log(m))*(1/m))
%31 = (m)->2*m-(c4/c1)*((1/m)*(log(log(m))+c8)^4+(log(m)+c7)*4*(log(log(m))+c8)^3*(1/log(m))*(1/m))
gp> nn(x)=x-g(x)/gdash(x)
%32 = (x)->x-g(x)/gdash(x)
gp> x=10^100;for(i=1,350,x=nn(x);print(x))
5.0000000000000000000000000000000000000 E99
2.5000000000000000000000000000000000000 E99
1.2500000000000000000000000000000000000 E99
6.2500000000000000000000000000000000000 E98
3.1250000000000000000000000000000000000 E98
.....
628715900289.44363308372970519919405054
314870848747.99700089787077356085313263
158437608366.52898934885012074019893037
81167724310.501100476425532534357616053
44310056347.547874930934538592447386463
28868511626.964399720930133207659892677
24661083815.622051558443456724625453612
24291400985.359662470260865960444141545
24288492746.940135912199417340070629841
24288492566.875482681706337267048777112
24288492566.875481991424355854789409484
24288492566.875481991424355854789399340
24288492566.875481991424355854789399340
24288492566.875481991424355854789399340
24288492566.875481991424355854789399340
24288492566.875481991424355854789399340
......
24288492566.875481991424355854789399340
24288492566.875481991424355854789399340
24288492566.875481991424355854789399340
24288492566.875481991424355854789399340
time = 35 ms.
主不等式より、
     M < 24288492566.875481991424355854789399340
であることが分かる。
しかし、ここで求めたMの上限は大き過ぎるので、LLL-algorithmによって、上限を下げる。

■不等式4,主不等式を単純に、
     |φ(P)| < K1exp(-K2M2), M < K3
と書くことができる。
ここで、
     K1 = (4*sqrt(2)/ω)*exp(c3),
     K2 = c1,
     K3 = 24288492566.875481991424355854789399340
である。

[pari/gpによる計算]
gp> K3=24288492566.875481991424355854789399340
%34 = 24288492566.875481991424355854789399340
gp> K1=(4*sqrt(2)/2*real(om1))*exp(c3)
%35 = 150.04993111010267825845773140246891939
gp> K2=c1
%36 = 0.11421431225932887028590310839487211456
gp> KK0(2,2,K3)
%37 = 13477474995038462504951910639350478.651

K0=1040, A=[1,  0,   0 ; 0,  1,   0 ; [K0*φ(P1)], [K0*φ(P2)],  K0] にLLL-algorithmを適用して、reduced basis {b1,b2,b3}を求めると、
     b1 = [ -1738636420502, -2099651020143, 2432402503300]t
となる。このとき、
     ||b1|| >= 2(1/2)*3*K3*sqrt(2) = 6*K3
ならば、
     M2 <= K2-1(log(K0K1) - log(2-4*||b1||2-2*K22)-2*K3)
が成立する。

[pari/gpによる計算]
gp> default(realprecision,80)
gp> K0=10^40
%40 = 10000000000000000000000000000000000000000
gp> a1=floor(K0*phi(e,p1,K0))
%41 = 5507561868054161622180545821798475489019
gp> a2=floor(K0*phi(e,p2,K0))
time = 1 ms.
%42 = 7024204136565772164280199604273112999676
gp> aaa=[1,0,0;0,1,0;a1,a2,K0]
%43 =
[1 0 0]

[0 1 0]

[5507561868054161622180545821798475489019 7024204136565772164280199604273112999676 10000000000000000000000000000000000000000]

gp> bbb=qflll(aaa,1)
%44 =
[-1738636420502  19088875004941  -6106729403756]

[-2099651020143 -14510495592101 -27958743575191]

[ 2432402503300   -320847691961  23002111227669]

gp> b1n=nr(bbb)
%45 = 3653487778430.8591373063590694458346183577999883413802077312362355816919198660533
gp> b1n-4*sqrt(6)*K3
%46 = 3415510124789.95130712274266062104179857
gp> M2=(1/K2)*(log(K0*K1)-log(sqrt(2^(-4)*b1n^2-2*K3^2)-2*K3))
%47 = 609.63779044717511724485805554485424833
gp> sqrt(M2)
%48 = 24.6908442635559774259459259189182791288

よって、
     M <= 24
が得られた。
次に、K3=24, K0=1010, A=[1,  0,  0; 0,  1,  0; [K0*φ(P1)],  [K0*φ(P1)],  K0] として、再度、LLL-algorithmを適用する。
[pari/gpによる計算]
gp> default(realprecision,35)
gp> K3=24
%50 = 24
gp> KK0(2,2,K3)
%51 = 13002910.542426107147320033938713949
gp> K0=10^10
%52 = 10000000000
gp> a1=floor(K0*phi(e,p1,K0))
%53 = 5507561867
gp> a2=floor(K0*phi(e,p2,K0))
%54 = 7024204136
gp> aaa=[1,0,0;0,1,0;a1,a2,K0]
%55 =
[         1          0           0]

[         0          1           0]

[5507561867 7024204136 10000000000]

gp> bbb=qflll(aaa,1)
%56 =
[  762 -2213   -49]

[-1147    51  1482]

[  386  1183 -1014]

gp> b1n=nr(bbb)
%57 = 1430.1220227658897218958470572709991
gp> b1n-4*sqrt(6)*K3
%58 = 1194.9710074587046244689077860992335
gp> M2=(1/K2)*(log(K0*K1)-log(sqrt(2^(-4)*b1n^2-2*K3^2)-2*K3))
time = 1 ms.
%59 = 195.30820792914027911640881533614215
gp> sqrt(M2)
%60 = 13.975271300734747421893303837406122

よって、
     M <= 13
が得られた。

■最後に、|m1|, |m2| <= 13, m0=0,1について、P=m1P1+m2P2+m0Tが整点かどうかを確認する。

[pari/gpによる計算]
(07:26) gp > p0=[0];p1=[-8,8];p2=[-9,7];t1=[-10,0];
(07:26) gp > e=ellinit([0,10,0,-32,-320])
%84 = [0, 10, 0, -32, -320, 40, -64, -1280, -13824, 3136, 120320, 9469952, 941192/289, Vecsmall([1]), [Vecsmall([128, 1])], [0, 0, 0, 0, 0, 0, 0, 0]]
(07:26) gp > check2(13,e,p1,p2)
[40, -280]
[-6, 4]
[6, 8]
[8, 24]
[-8, -8]
[232, 3608]
[-9, -7]
[-9, 7]
[232, -3608]
[-8, 8]
[8, -24]
[6, -8]
[-6, -4]
[40, 280]
There are 14 integral points.
time = 32 ms.
gp> check2t(13,e,p1,p2,t1)
[602, 14892]
[1656, -67592]
[7, -17]
[24, 136]
[58, 476]
[-10, 0]
[58, -476]
[24, -136]
[7, 17]
[1656, 67592]
[602, -14892]
There are 11 integral points.
time = 34 ms.

よって、楕円曲線Eの整点は、
     (-10,0),(-9,±7),(-8,±8),(-6,±4),(6,±8),(7,±17),(8,±8),(24,±136),
     (40,±280),(58,±476),(232,±3608),(602,±14892),(1656,±67592)
の25個に限る。

■楕円曲線E1: V2=8U3+10U2-4U-5の整数点(U,V)を求める。
楕円曲線E: v2=u3+10u2-32u-320の25個の整点(u,v)の中で、ある整数U,Vに対して、u=8U, v=8Vを満たすものは、
     (-8,±8),(8,±8),(24,±136),(40,±280),(232,±3608),(1656,±67592)
の10個である。
よって、楕円曲線E1の整点(U,V)は、
     (-1,±1),(1,±1),(3,±17),(5,±35),(29,±451),(207,±8449)
の10個に限る。

■曲線A: 2x(x-1)(x-2)(x-3)=y(y-1)(y-2)(y-3)の整点を求める。
曲線Aの整点(x,y)は、楕円曲線E1の整点(U,V)に対して、
     x2-3x+1 = U,
     (2x-3)(y2-3y+1) = ±V
を満たすので、前者より、整数xは、
     0,1,2,3,-1,4,-4,7
の8個に限る。

x=-4のとき、y2-3y+1=±41より、y=8,-5である。
x=-1のとき、y2-3y+1=±35/11を満たす整数yは存在しない。
x=0,1,2,3のとき、y=0,1,2,3である。
x=4のとき、y2-3y+1=±35/11を満たす整数yは存在しない。
x=7のとき、y2-3y+1=±41より、y=8,-5である。

よって、曲線Aの整点(x,y)は、16個の自明な整点
     (x,y) ∈ {0,1,2,3}×{0,1,2,3},
と、4個の自明でない整点
     (-4,-5), (-4,8), (7,-5), (7,8)
のいずれかに限る[全部で20個]。

[2021.03.17追記]
"c1-c8,楕円対数の計算プログラム(pari/gp)"の関数eeb1(),eeb2(),eeb3()の誤りを修正し、計算結果を見直し、訂正した。


[参考文献]


Last Update: 2021.03.18
H.Nakao

Homeに戻る[Homeに戻る]  一覧に戻る[一覧に戻る]