中尾です。
このような数は、RamanujanのTaxicab数と呼ばれています。
以前(2002.05.02)に,Rubyプログラムで計算した結果によると、
以下のようになります。
Ramanujan Taxi Numbers [1..1000000000]
[0:2]1^3+12^3=9^3+10^3=1729
[1:2]2^3+16^3=9^3+15^3=4104
[2:2]10^3+27^3=19^3+24^3=20683
[3:2]2^3+34^3=15^3+33^3=39312
[4:2]9^3+34^3=16^3+33^3=40033
[5:2]17^3+39^3=26^3+36^3=64232
[6:2]12^3+40^3=31^3+33^3=65728
[7:2]12^3+51^3=38^3+43^3=134379
[8:2]8^3+53^3=29^3+50^3=149389
[9:2]17^3+55^3=24^3+54^3=171288
[10:2]9^3+58^3=22^3+57^3=195841
[11:2]3^3+60^3=22^3+59^3=216027
[12:2]30^3+67^3=51^3+58^3=327763
[13:2]42^3+69^3=56^3+61^3=402597
[14:2]5^3+76^3=48^3+69^3=439101
[15:2]17^3+76^3=38^3+73^3=443889
[16:2]15^3+80^3=54^3+71^3=515375
[17:2]51^3+82^3=64^3+75^3=684019
[18:2]2^3+89^3=41^3+86^3=704977
[19:2]11^3+93^3=30^3+92^3=805688
[20:2]23^3+94^3=63^3+84^3=842751
[21:2]20^3+97^3=33^3+96^3=920673
[22:2]24^3+98^3=63^3+89^3=955016
[23:2]35^3+98^3=59^3+92^3=984067
[24:2]29^3+99^3=60^3+92^3=994688
[25:2]50^3+96^3=59^3+93^3=1009736
[26:2]47^3+97^3=66^3+90^3=1016496
[27:2]23^3+102^3=60^3+95^3=1073375
[28:2]1^3+103^3=64^3+94^3=1092728
[29:2]4^3+110^3=67^3+101^3=1331064
[30:2]62^3+109^3=90^3+93^3=1533357
[31:2]55^3+113^3=92^3+94^3=1609272
[32:2]42^3+121^3=49^3+120^3=1845649
[33:2]2^3+127^3=95^3+106^3=2048391
[34:2]23^3+134^3=95^3+116^3=2418271
[35:2]18^3+139^3=94^3+123^3=2691451
[36:2]10^3+142^3=103^3+121^3=2864288
[37:2]76^3+141^3=85^3+138^3=3242197
[38:2]1^3+150^3=73^3+144^3=3375001
[39:2]2^3+150^3=83^3+141^3=3375008
[40:2]4^3+152^3=41^3+151^3=3511872
[41:2]18^3+153^3=121^3+122^3=3587409
[42:2]26^3+156^3=123^3+125^3=3813992
[43:2]10^3+161^3=84^3+153^3=4174281
[44:2]23^3+163^3=121^3+137^3=4342914
[45:2]24^3+165^3=86^3+157^3=4505949
[46:2]27^3+165^3=100^3+152^3=4511808
[47:2]32^3+166^3=129^3+135^3=4607064
[48:2]25^3+167^3=64^3+164^3=4673088
[49:2]76^3+165^3=102^3+157^3=4931101
[50:2]36^3+172^3=93^3+163^3=5135104
[51:2]37^3+174^3=136^3+141^3=5318677
[52:2]71^3+172^3=135^3+144^3=5446359
[53:2]51^3+178^3=115^3+162^3=5772403
[54:2]40^3+179^3=107^3+166^3=5799339
[55:2]72^3+178^3=115^3+165^3=6013000
[56:2]57^3+180^3=113^3+166^3=6017193
[57:2]99^3+172^3=120^3+163^3=6058747
[58:2]10^3+184^3=67^3+181^3=6230504
[59:2]3^3+186^3=59^3+184^3=6434883
[60:2]66^3+184^3=105^3+175^3=6517000
[61:2]45^3+196^3=133^3+174^3=7620661
[62:2]93^3+192^3=149^3+166^3=7882245
[63:2]32^3+202^3=129^3+183^3=8275176
[64:2]15^3+204^3=79^3+200^3=8493039
[65:2]14^3+207^3=140^3+183^3=8872487
[66:2]9^3+210^3=161^3+172^3=9261729
[67:2]68^3+209^3=146^3+185^3=9443761
[68:2]72^3+213^3=109^3+206^3=10036845
[69:2]50^3+216^3=167^3+177^3=10202696
[70:2]40^3+218^3=101^3+211^3=10424232
[71:2]81^3+215^3=120^3+206^3=10469816
[72:2]135^3+202^3=166^3+183^3=10702783
[73:2]64^3+219^3=163^3+186^3=10765603
[74:2]84^3+217^3=145^3+198^3=10811017
[75:2]116^3+210^3=147^3+197^3=10821896
[76:2]20^3+223^3=159^3+192^3=11097567
[77:2]73^3+223^3=94^3+220^3=11478584
[78:2]17^3+226^3=54^3+225^3=11548089
[79:2]24^3+226^3=55^3+225^3=11557000
[80:2]10^3+233^3=108^3+225^3=12650337
[81:2]47^3+233^3=176^3+194^3=12753160
[82:2]80^3+235^3=171^3+204^3=13489875
[83:2]21^3+238^3=114^3+229^3=13490533
[84:2]121^3+228^3=186^3+193^3=13623913
[85:2]87^3+240^3=94^3+239^3=14482503
[86:2]31^3+246^3=103^3+240^3=14916727
[87:2]45^3+246^3=173^3+214^3=14978061
[88:2]156^3+225^3=169^3+218^3=15187041
[89:2]68^3+246^3=185^3+207^3=15201368
[90:2]80^3+246^3=179^3+213^3=15398936
[91:2]1^3+249^3=135^3+235^3=15438250
[92:2]119^3+241^3=168^3+222^3=15682680
[93:2]5^3+254^3=197^3+206^3=16387189
[94:2]18^3+255^3=151^3+236^3=16587207
[95:2]58^3+255^3=183^3+220^3=16776487
[96:2]21^3+257^3=167^3+231^3=16983854
[97:2]87^3+254^3=191^3+216^3=17045567
[98:2]146^3+246^3=207^3+209^3=17999072
[99:2]19^3+264^3=75^3+262^3=18406603
[100:2]20^3+265^3=118^3+257^3=18617625
....以下省略....
プログラムは以下の通りです。
-------------ここから--------------------------------------------
#!/usr/local/bin/ruby -K
# rtaxi.rb
#
# Find Ramanujan Texicab Numbers n
# such that for some a,b,c,d \in N, a < c < d < b, n = a^3+b^3=c^3+d^3 .
#
class Integer
def p3 # self^3
self ** 3
end
def icuberoot # [self^(1/3)]
upper = self
lower = 1
while upper-lower > 1 do
mid = (upper+lower)/2
if mid.p3 > self
upper = mid
else
lower = mid
end
end
lower
end
def gcd(m) # gcd{self,m}
if m == 0 or self == m then
self
else
if self >= m then
p = m
m = self % m
else
p = self
m = m % self
end
while m != 0 do
t = p
p = m
m = t % m
end
p
end
end
def max(m) # max{self,m}
if self >= m
self
else
m
end
end
def min(m) # min{self,m}
if self <= m
self
else
m
end
end
end
class Ramanujan
def initialize
@taxi = Hash.new(nil)
@limu = 1000
@liml = 1
@count = 0
end
# taxi number in [1..n]
def table(n)
@taxi.clear
@limu = n
@liml = 1
@count = 0
ilimu = (@limu-1).icuberoot
(1..ilimu).each do |i|
jlimu = (@limu-i.p3).icuberoot.max(i)
(i..jlimu).each do |j| # i <= j
k = i.p3 + j.p3
if k <= @limu
if @taxi[k] == nil
@taxi[k] = [i,j]
else
@taxi[k] = @taxi[k]+[i,j]
end
else
break
end
end
end
self
end
# taxi number [m..n]
def table2(m,n)
@taxi.clear
@limu = n
@liml = m
ilimu = (@limu-1).icuberoot
(1..ilimu).each do |i|
jlimu = (@limu-i.p3).icuberoot.max(i)
(i..jlimu).each do |j| # i <= j
k = i.p3 + j.p3
if k <= @limu && k >= @liml
if @taxi[k] == nil
@taxi[k] = [i,j]
else
@taxi[k] = @taxi[k]+[i,j]
end
else
if k > @limu
break
end
end
end
end
self
end
def count
@count
end
def find # print @taxi
@taxi.each do |key, value|
len = (value.length)/2
if len >= 2
a = value[0]
b = value[1]
c = value[2]
d = value[3]
g = a.gcd(b).gcd(c).gcd(d)
out = sprintf("%d]%d^3+%d^3=%d^3+%d^3",len,a,b,c,d)
if len >= 3
(2..(len-1)).each do |j|
e = value[2*j]
f = value[2*j+1]
g = g.gcd(e).gcd(f)
out = out + sprintf("=%d^3+%d^3",e,f)
end
end
if g == 1
@taxi[key] = out
else
# delete (key,value)
@taxi.delete(key)
end
elsif len == 1
# delete (key,value)
@taxi.delete(key)
end
end
self
end
def print # print @taxi
printf("Ramanujan Taxi Numbers [%d..%d]\n",@liml,@limu)
k = @taxi.keys.sort
i = @count
# p(k)
# p(@taxi.values.sort)
k.each do |key|
if @taxi[key] != nil
printf("[%i:%s=%d\n",i,@taxi[key],key)
i = i + 1
end
end
@count = i
self
end
def taxi(n) #[1..n]
self.table(n).find.print
nil
end
def taxip3(n) #[1..n^3]
self.table(n.p3).find.print
nil
end
def taxi2(m,n) #[m..n]
self.table2(m,n).find.print
nil
end
def taxi2p3(m,n) #[m^3..n^3]
self.table2(m.p3,n.p3).find.print
nil
end
end
=begin
n=1000.p3
a=Ramanujan.new
a.taxi(n)
(1..10).each do |i|
a.taxi2(i*n,(i+1)*n)
end
=end
----------------------ここまで----------------------------------
参考URL
http://www.kaynet.or.jp/~kay/misc/column/ramanujan.html
参考文献
[1]Joseph H.Silverman, John Tate(著), 足立 恒雄, 木田 雅成, 小松 啓一,
田谷 久雄(訳), "楕円曲線論入門", シュプリンガー・フェアラーク東京,
p196-201, 1995, ISBN4-431-70683-6, {3900円}
[2]Alf van der Poorten(著), 山口 周(訳), "フェルマーの最終定理について
のノート", 森北出版, p77-78, 2000, ISBN4-627-06101-3, {3800円}
Shin-ichiro HARA wrote:
>
> 自然数のペアで、3乗の和が等しくなるもののリストを100個あげて
> ください。
>