Homeに戻る  一覧に戻る 

Nearly Perfect Cuboids


[2005.02.06]概完全直方体



■完全直方体
3辺の長さx1,x2,x3が正整数の直方体で、その全ての面の対角線と立体の対角線の長さも正整数となるものを完全直方体(Perfect Cuboid)と呼ぶ。
つまり、3個の正整数の組(x1,x2,x3)が完全直方体であるとは、
     x12+x22 = y32,
     x22+x32 = y12,
     x32+x12 = y22,
     x12+x22+x32 = z2
を満たす正整数y1, y2, y3, zが存在することである。

完全直方体は、今のところ、見つかっていない。完全直方体が存在するかどうかは、数論の未解決問題[1]である。

■概完全直方体
完全直方体の条件から、立体の対角線の長さが正整数であるという条件を除いたものを概完全直方体(Nearly Perfect Cuboid)と呼ぶ。
つまり、3個の正整数の組(x1,x2,x3)が概完全直方体であるとは、
     x12+x22 = y32,
     x22+x32 = y12,
     x32+x12 = y22
を満たす正整数y1, y2, y3が存在することである。

[3]によると、Eulerは概完全直方体の1つ(44,117,240)を見つけた。この場合、3つの面の対角線の長さは、それぞれ正整数125, 267, 244となる。立体の対角線の長さは、無理数5*sqrt{29*101}になるので、完全直方体ではない。

[pari/gpによる計算]
gp>  [sqrt(44^2+117^2),sqrt(117^2+240^2),sqrt(240^2+44^2)]
time = 8 ms.
%1 = [125.0000000000000000000000000, 267.0000000000000000000000000, 244.0000000000000000000000000]
gp>  [(44^2+117^2-125^2),(117^2+240^2-267^2),(240^2+44^2-244^2)]
time = 3 ms.
%2 = [0, 0, 0]
gp>  sqrt(44^2+117^2+240^2)
time = 0 ms.
%3 = 270.6011825546961648015125165
gp>  factor(44^2+117^2+240^2)
time = 1 ms.
%4 = 
[5 2]

[29 1]

[101 1]


以下では、いくつかの与えられた正有理数rに対して、x1/x2=rになるような概完全直方体を求める。
もちろん、rの値によって、x1/x2=rを満たす概完全直方体(x1,x2,x3)が存在することもあり、存在しないこともある。

■ある概完全直方体(x1,x2,x3)がx1/x2 = r (r > 0, r!=1)を満たすと仮定する。
ある有理数u,v,wが存在して、
     x1:x2:y3 = (w2-1):2w:(w2+1),
     x2:x3:y1 = 2u:(u2-1):(u2+1),
     x3:x1:y2 = (v2-1):2v:(v2+1)
となる。
x1/x2 = rより、r = (w2-1)/(2w)を得る。
これより、少なくとも、有理数rに対して、wの2次方程式w2-2rw-1=0が有理根を持つこと、つまり、r2+1が有理数の平方数であることが必要である。
さらに、
(x1/x2)(x2/x3)(x3/x1)=r(2u/(u2-1))((v2-1)/(2v))=1より、
     (u2-1)/(2u) = r((v2-1)/(2v))
つまり、
     Cr: v(u2-1) = r*u(v2-1)

3次曲線Crは、8個の自明な有理点(0,0),(±1,±1),[1:0:0],[0:1:0],[r:1:0]を持つ。

3次曲線Crを双有理変換(u,v)→(x,y)
     x = -r(u-rv)/(ru-v),
     y = r(r2-1)/(ru-v)
[逆変換は、
     u = (r2+x)/y,
     v = r(1+x)/y
]によって、楕円曲線
     Er: y2 = x3+(r2+1)x2+r2x
つまり、
     y2 = x(x+1)(x+r2)
に写される。
r > 0, r!=1より、楕円曲線Erは非特異である。

よって、楕円曲線Erが無限位数の有理点(x,y)を持つならば、3次曲線Crも自明でない(u!=0,±1, v!=0,±1)有理点(u,v)を持つので、概完全直方体(x1,x2,x3)が存在することが分かる。

例えば、rank(Er(Q)) >= 1であれば、x1/x2=rを満たす概完全直方体(x1,x2,x3)が存在する。

■例1:r=4/3の場合
楕円曲線
     E{4/3}: y2=x3+(25/9)x2+(16/9)x
のminimal modelは、
     E'{4/3}: y2+xy=x3-4x-1
である。
楕円曲線E'{4/3}のねじれ点群は、
     E'{4/3}(Q)tors = Z/2Z×Z/4Z = {(-1, 2), (2, -1), (-1, -1), O, (5, 8), (-2, 1), (5, -13), (-1/4, 1/8)}である。
よって、楕円曲線E{4/3}のねじれ点群は、
     E{4/3}(Q)tors = Z/2Z×Z/4Z = {(-4/3, ±4/9), (0, 0), O, (4/3, ±28/9), (-16/9, 0), (-1, 0)}
である。
これらのねじれ点に対応するC{4/3}の有理点で、u(u^2-1)!=0,v(v^2-1)!=0を満たすものは存在しない。
また、Cremonaのmwrank3により、rank(E'{4/3}) = 0を得る。よって、rank(E{4/3}) = rank(C{4/3}) = 0であることが分かる。

[pari/gpによる計算]
gp>  read("cuboid.gp")
time = 22 ms.
gp>  e=ec(4/3)
time = 77 ms.
%1 = [0, 25/9, 0, 16/9, 0, 100/9, 32/9, 0, -256/81, 3088/81, 36800/729, 200704/6561, 7189057/3969, [0.E-28, -1.000000000000000000000000000, -1.777777777777777777777777777]~, 2.706692432330952333560400938, 2.866484671127743794829722327*I, -0.5888593317577585993476873264, -1.784299111282776483494474046*I, 7.758692366734142825725415403]
gp>  e2=er2(e)
time = 23 ms.
%2 = [1, 0, 0, -4, -1, 1, -8, -4, -17, 193, 575, 3969, 7189057/3969, [2.000000000000000000000000000, -0.2500000000000000000000000000, -1.999999999999999999999999999]~, 1.804461621553968222373600625, 1.910989780751829196553148218*I, -0.8832889976366378990215309895, -2.676448666924164725241711069*I, 3.448307718548507922544629068]
gp>  elltors(e2,1)
time = 41 ms.
%3 = [8, [4, 2], [[-1, 2], [-1/4, 1/8]]]
gp>  for(i=1,4,print(ellpow(e2,[-1,2],i)))
[-1, 2]
[2, -1]
[-1, -1]
[0]
time = 1 ms.
gp>  for(i=1,4,print(elladd(e2,[-1/4,1/8],ellpow(e2,[-1,2],i))))
[5, 8]
[-2, 1]
[5, -13]
[-1/4, 1/8]
time = 7 ms.
gp>  cuboid([5,8],e,1,4/3)
w=3
time = 11 ms.
%4 = [4, 3, 0]
gp>  cuboid([-2,1],e,1,4/3)
  ***   division by zero in gdiv, gdivgs or ginv
gp>  cuboid([5,-13],e,1,4/3)
w=3
time = 5 ms.
%5 = [4, 3, 0]
gp>  cuboid([-1/4,1/8],e,1,4/3)
  ***   division by zero in gdiv, gdivgs or ginv
gp>  cuboid([-1,2],e,1,4/3)
w=3
time = 3 ms.
%6 = [4, 3, 0]
gp>  cuboid([2,-1],e,1,4/3)
  ***   division by zero in gdiv, gdivgs or ginv
gp>  cuboid([-1,-1],e,1,4/3)
w=3
time = 2 ms.
%7 = [4, 3, 0]
gp>  h2=hinv(h(e))      
time = 3 ms.
%8 = [3/2, 2, -1/2, -1]
gp>  t1=ellchangepoint([-1,2],h2)
time = 0 ms.
%9 = [-4/3, 4/9]
gp>  t2=ellchangepoint([-1/4,1/8],h2)
time = 0 ms.
%10 = [-1, 0]
gp> for(i=1,4,print(ellpow(e,t1,i)))
[-4/3, 4/9]
[0, 0]
[-4/3, -4/9]
[0]
time = 1 ms.
gp>  for(i=1,4,print(elladd(e,t2,ellpow(e,t1,i))))
[4/3, 28/9]
[-16/9, 0]
[4/3, -28/9]
[-1, 0]
time = 3 ms.

よって、r=4/3に対応する(つまり、x1/x2=4/3である)概完全直方体(x1,x2,x3)は存在しない。

■例2:r=24/7の場合
楕円曲線
     E{24/7}: y2=x3+(625/49)x2+(576/49)x
のminimal modelは、
     E'{24/7}: y2+xy=x3-6374x+190164
である。
楕円曲線E'{24/7}のねじれ点群は、
     E'{24/7}(Q)tors = Z/2Z×Z/4Z = {(10,352), (52,-26), (10,362), O, (94,604), (-92,46), (94,-698), (159/4,-159/8)}
である。
よって、楕円曲線E{24/7}のねじれ点群は、
     E{24/7}(Q)tors = Z/2Z×Z/4Z = {(-24/7,±408/49), (0,0), O, (24/7,±744/49), (-576/49,0), (-1,0)}
である。
これらのねじれ点に対応するC{24/7}の有理点で、u(u^2-1)!=0,v(v^2-1)!=0を満たすものは存在しない。
また、Cremonaのmwrank3により、rank(E'{24/7})=1、E'{24/7}(Q)/E'{24/7}(Q)torsの生成元(70,262)を得る。
よって、rank(E{24/7})=rank(C{24/7})=1、E{24/7}(Q)/E{24/7}(Q)torsの生成元は(72/49, 2376/343)、C{24/7}(Q)/C{24/7}(Q)torsの生成元は(21/11, 11/9)であることが分かる。
これより、r=24/7に対応する(つまり、x1/x2=24/7である)概完全直方体(x1,x2,x3)をいくつか計算すると、以下のようになる。

     (792, 231, 160),
     (899110080, 262240440, 512751161),
     (182097625843812033432, 53111807537778509751, 227539897138115802080),
     (549629165772367688358887137180824960, 160308506683607242438008748344407280, 13530007643540875677559415942982241),
     (41838728820268694396388575488112172660242981955223638888, 12202962572578369198946667850699383692570869736940228009, 70823872132805304217706645379551771665311639370261568800),
     ....

[pari/gpによる計算]
gp>  e=ec(24/7)
time = 14 ms.
%2 = [0, 625/49, 0, 576/49, 0, 2500/49, 1152/49, 0, -331776/2401, 4895248/2401, -10544680000/117649, 1474301067264/5764801, 28639415351758177/864208218384, [0.E-28, -1.000000000000000000000000000, -11.75510204081632653061224489]~, 1.548414189180609242009177709, 0.9367765317992825528222559084*I, -0.4533284566972484427315902854, -2.303169357358936734836703578*I, 1.450518073929409304150377824]
gp>  e2=er2(e)
time = 25 ms.
%3 = [1, 0, 0, -6374, 190164, 1, -12748, 760656, -40437712, 305953, -164760625, 864208218384, 28639415351758177/864208218384, [52.00000000000000000000000000, 39.75000000000000000000000000, -91.99999999999999999999999999]~, 0.4424040540516026405740507741, 0.2676504376569378722349302595*I, -1.586649598440369549560565999, -8.061092750756278571928462524*I, 0.1184096386881150452367655366]
gp>  elltors(e2,1)
time = 200 ms.
%4 = [8, [4, 2], [[10, 352], [159/4, -159/8]]]
gp>  for(i=1,4,print(ellpow(e2,[10,352],i)))
[10, 352]
[52, -26]
[10, -362]
[0]
time = 4 ms.
gp>  for(i=1,4,print(elladd(e2,[159/4, -159/8],ellpow(e2,[10,352],i))))
[94, 604]
[-92, 46]
[94, -698]
[159/4, -159/8]
time = 5 ms.
gp>  h2=hinv(h(e))
time = 3 ms.
%5 = [7/2, 52, -1/2, -26]
gp>  t1=ellchangepoint([10, 352],h2)
time = 0 ms.
%6 = [-24/7, 408/49]
gp>  t2=ellchangepoint([159/4, -159/8],h2)
time = 0 ms.
%7 = [-1, 0]
gp>  for(i=1,4,print(ellpow(e,t1,i)))
[-24/7, 408/49]
[0, 0]
[-24/7, -408/49]
[0]
time = 3 ms.
gp>  for(i=1,4,print(elladd(e,t2,ellpow(e,t1,i))))
[24/7, 744/49]
[-576/49, 0]
[24/7, -744/49]
[-1, 0]
time = 3 ms.
gp>  ellchangepoint([70,262],h2)
time = 0 ms.
%8 = [72/49, 2376/343]
gp>  g([72/49, 2376/343],24/7)
time = 0 ms.
%9 = [21/11, 11/9]
gp>  for(i=1,5,print(cuboid([70,262],e,i,24/7)))
w=7
[792, 231, 160]
w=7
[899110080, 262240440, 512751161]
w=7
[182097625843812033432, 53111807537778509751, 227539897138115802080]
w=7
[549629165772367688358887137180824960, 160308506683607242438008748344407280, 13530007643540875677559415942982241]
w=7
[41838728820268694396388575488112172660242981955223638888, 12202962572578369198946667850699383692570869736940228009, 70823872132805304217706645379551771665311639370261568800]
time = 90 ms.
gp>  check([792, 231, 160])
time = 0 ms.
%10 = [792, 231, 160, 825, 281, 808]
gp>  check([899110080, 262240440, 512751161])
time = 0 ms.
%11 = [899110080, 262240440, 512751161, 936573000, 575919961, 1035042361]
gp>  check([182097625843812033432, 53111807537778509751, 22753989713811802080])
time = 3 ms.
%12 = [182097625843812033432, 53111807537778509751, 227539897138115802080, 189685026920637534825, 233656305049862384201, 291434298131804108968]
gp>  check([549629165772367688358887137180824960, 16030850668360724243808748344407280, 13530007643540875677559415942982241])
time = 2 ms.
%13 = [549629165772367688358887137180824960, 160308506683607242438008748344407280, 13530007643540875677559415942982241, 572530381012883008707174101230026000, 160878458539241425810170876566473441, 549795672022309680319706768453651041]
gp>  check([41838728820268694396388575488112172660242981955223638888, 1202962572578369198946667850699383692570869736940228009, 70823872132805304217706645379551771665311639370261568800])
time = 6 ms.
%14 = [41838728820268694396388575488112172660242981955223638888, 12202962572578369198946667850699383692570869736940228009, 70823872132805304217706645379551771665311639370261568800, 43582009187779889996238099466783513187753106203357957175, 71867469410239458088972697488399424639566001429002723241, 82258738704042490367438133736382052346380296509486078888]

[2005.02.14追記]
■例3:r=11/60の場合
楕円曲線
     E{11/60}: y2=x3+(3721/3600)x2+(121/3600)x
のminimal modelは、
     E'{11/60}: y2+xy=x3-261230x+51166275
である。
楕円曲線E'{11/60}のねじれ点群は、
     E'{11/60}(Q)tors = Z/2Z×Z/4Z = {(145, 3970), (310, -155), (145, -4115), O, (475, 5620), (-590, 295), (475, -6095), (1119/4, -1119/8)}
である。
よって、楕円曲線E{11/60}のねじれ点群は、
     E{11/60}(Q)tors = Z/2Z×Z/4Z = {(-11/60, ±539/3600), (0, 0), O, (11/60,±781/3600), (-121/3600, 0), (-1, 0)}である。
これらのねじれ点に対応するC{11/60}の有理点で、u(u^2-1)!=0,v(v^2-1)!=0を満たすものは存在しない。
また、Cremonaのmwrank3により、rank(E'{11/60})=2、E'{11/60}(Q)/E'{11/60}(Q)torsの生成元(-515, 7270), (-185, 9745)を得る。
よって、rank(E{11/60})=rank(C{11/60})=2、E{11/60}(Q)/E{11/60}(Q)torsの生成元は(-11/12, 187/720), (-11/20, 143/400)、C{11/60}(Q)/C{11/60}(Q)torsの生成元は(-17/5, 1/17), (-13/9, 3/13)であることが分かる。
これより、r=11/60に対応する(つまり、x1/x2=11/60である)概完全直方体(x1,x2,x3)をいくつか計算すると、以下のようになる。

     (187, 1020, 1584),
     (102169320, 557287200, 359216039),
     (115928828823741750773, 632339066311318640580, 197537039142105201264),
     (18175459137242706685286642343441840, 99138868021323854647018049146046400, 13408434804227761857144840377929441),
     (7095499711217082934524334690060163187636087295841633707, 38702725697547725097405461945782708296196839795499820220, 543696042944801361233600524104276978706172863367933424),
     ....
     (429, 2340, 880),
     (38181000, 208260000, 8430569),
     (2601004651818246531, 14187298100826799260, 9008213695270890320),
     (5246623706220307185738205242000, 28617947488474402831299301320000, 63222494351164443597463075334879),
     (274628629423373666071926752781434834989937794945251, 1497974342309310905846873196989644554490569790610460, 326881068396333015392041765464686882755784210528720),
     ....

[pari/gpによる計算]
gp>  e=ec(11/60)
time = 0 ms.
%4 = [0, 3721/3600, 0, 121/3600, 0, 3721/900, 121/1800, 0, -14641/12960000, 12539041/810000, -44226470161/729000000, 177206479681/10497600000000, 1971482685744317245921/8971078033850625, [0.E-28, -0.03361111111111111111111111111, -1.000000000000000000000000000]~, 6.201111831638553984250505964, 3.168501805137897848912435033*I, 0.02441980864363893593149977190, -0.4941401685722584182327679808*I, 19.64823403240873438913607631]
gp>  e2=er2(e)
time = 5 ms.
%5 = [1, 0, 0, -261230, 51166275, 1, -522460, 204665100, -68189946625, 12539041, -44226470161, 8971078033850625, 1971482685744317245921/8971078033850625, [309.9999999999999999999999999, 279.7500000000000000000000000, -590.0000000000000000000000000]~, 0.2067037277212851328083501988, 0.1056167268379299282970811677*I, 0.7325942593091680779449931572, -14.82420505716775254698303942*I, 0.02183137114712081598792897368]
gp>  elltors(e2,1)
time = 588 ms.
%6 = [8, [4, 2], [[145, 3970], [1119/4, -1119/8]]]
(20:20) gp > t1=[145, 3970];t2=[1119/4, -1119/8];for(i=1,4,print(ellpow(e2,t1,i)))
[145, 3970]
[310, -155]
[145, -4115]
[0]
time = 0 ms.
gp> for(i=1,4,print(elladd(e2,t2,ellpow(e2,t1,i))))[475, 5620]
[-590, 295]
[475, -6095]
[1119/4, -1119/8]
time = 0 ms.
gp>  h2=hinv(h(e))
time = 0 ms.
%7 = [30, 310, -1/2, -155]
gp>  tt1=ellchangepoint(t1,h2)
time = 0 ms.
%8 = [-11/60, 539/3600]
gp>  tt2=ellchangepoint(t2,h2)
time = 0 ms.
%9 = [-121/3600, 0]
gp> for(i=1,4,print(ellpow(e,tt1,i)))
[-11/60, 539/3600]
[0, 0]
[-11/60, -539/3600]
[0]
time = 0 ms.
gp>  for(i=1,4,print(elladd(e,tt2,ellpow(e,tt1,i))))
[11/60, 781/3600]
[-1, 0]
[11/60, -781/3600]
[-121/3600, 0]
time = 0 ms.
gp>  ellchangepoint([-515, 7270],h2)
time = 0 ms.
%10 = [-11/12, 187/720]
gp>  ellchangepoint([-185, 9745],h2)
time = 0 ms.
%11 = [-11/20, 143/400]
gp>  g([-11/12, 187/720], 11/60)
time = 0 ms.
%12 = [-17/5, 1/17]
gp>  g([-11/20, 143/400], 11/60)
time = 0 ms.
%13 = [-13/9, 3/13]
gp>  for(i=1,5,print(cuboid([-515, 7270],e,i,11/60)))
w=6/5
[187, 1020, 1584]
w=6/5
[102169320, 557287200, 359216039]
w=6/5
[115928828823741750773, 632339066311318640580, 197537039142105201264]
w=6/5
[18175459137242706685286642343441840, 99138868021323854647018049146046400, 13408434804227761857144840377929441]
w=6/5
[7095499711217082934524334690060163187636087295841633707, 38702725697547725097405461945782708296196839795499820220, 543696042944801361233600524104276978706172863367933424]
time = 4 ms.
gp>  for(i=1,5,print(cuboid([-185, 9745],e,i,11/60)))
w=6/5
[429, 2340, 880]
w=6/5
[38181000, 208260000, 8430569]
w=6/5
[2601004651818246531, 14187298100826799260, 9008213695270890320]
w=6/5
[5246623706220307185738205242000, 28617947488474402831299301320000, 63222494351164443597463075334879]
w=6/5
[274628629423373666071926752781434834989937794945251, 1497974342309310905846873196989644554490569790610460, 326881068396333015392041765464686882755784210528720]
time = 3 ms.



[参考文献]


Last Update: 2005.06.12
H.Nakao

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