r個のe乗数でn通りに表せる最初の数

(* r個のe乗数でn通りに表せる最初の数 *)

(* 関数型 *)
f[r_, e_, n_, m_: 10] :=
Quiet@Check[Cases[Tally[Sort[Total /@ Union[Sort /@ Tuples[Range[m]^e, r]]]], {_, n}]1, 1, f[r, e, n, 2 m]]

(* 手続き型 *)
g[r_, e_, n_, m_: 10] :=
Catch[Block[{a = Tuples[Range[m]^e, r], b, c, d = 0}, c[_] := 0;
Do[b = Total[ai]; If[OrderedQ[ai], c[b] = c[b] + 1]; If[d <b, d = b], {i, m^r}];
Do[If[c[i] == n, Throw[i]], {i, d}]; g[r, e, n, 2 m]]]


(* 計算結果 *)
f[2, 2, 2] // Timing
→{0.000676, 50}
f[4, 3, 3] // Timing
→{0.007277, 1225}
f[2, 3, 2] // Timing
→{0.00149, 1729}

g[2, 2, 2] // Timing
→{0.001768, 50}
g[4, 3, 3] // Timing
→{0.025981, 1225}
g[2, 3, 2] // Timing
→{0.008084, 1729}

 

ラマヌジャンの有名なタクシー数→1729

2個の二乗数で2通りに表せる最初の数 50

4個の三乗数で3通りに表せる最初の数 1225

 

(1772年、オイラー)2つの4乗数の和で2通りに…f[2,4,2]

解: ([59 , 158 ]^4 , [133 , 134 ]^4 ) = 635318657

電卓がない時期にどうやってこれを見つけたのか…やはりオイラーは史上最高のアルゴリストである。

以下は、バトラー二世という人のプログラムで4724組を見つけた中で最大だったものだ。

f[2,3,2]→([1956 , 1360]^3 , [2088 , 964 ]^3 )

また、4724組のうち26個は三重だった。つまりf[2,3,3]

f[2,3,3]→([414 , 255]^3 , [423 , 228]^3 , [436 , 167]^3 )

詳しくは、参考文献:マーチン・ガードナー「円周率と詩」の38ページ。

 

الرقم الأول الذي يمكن تمثيله بطرق n بواسطة مضاعفات r e