ネットで知ったのですが、
1953年、数学者ルイス・モーデルが、ぽろっと口にした、
13+13+13 = 43+43+(-5)3 = 3
以外に整数解はないよね?
ここから、プロ、アマ、数々の数学者たちは、しゃかりきになって解を探した。
しまいには、解はないという者まで現れはじめる。
簡潔な数学の問題文にしてみると、
問題
x3+y3+z3 = 3
を満たす整数x, y, zを求めよ。
という数学やプログラミングの問題なのですが、
手計算でもいくつかの解を見つけることが出来るかとは思います。
数学的、プログラミング的な手法として、x, y, z は可換なので、x, y, zに大小関係を設定して、非可換にします。
x≧y≧z とおく
これにより、プログラムは余計なループをせずに済みます。
続いて、今回のような問題をプログラミングをする上で、その言語が対応している整数の最大桁数を考えます。
64ビットの符号付き整数だとすると、
0x7fffffffですから、
±9223372036854775807
が限界です。
3乗した値が、この値だとすると、3乗する前の値は、
±2097151
が限界ですね。
まぁ、10進数のキリが良いところで、1000000=106くらいにしておきましょうか。
106≧x≧y≧z≧-(106)
3重ネストで、虱潰しに探索すると、
for (x=1; x<=1000000; x++) {
for (y=1; y<=x; y++) {
for (z=1; z<=y; z++) {
/* 処理 */
}
}
}
こんな感じに書くことになるだろう。
処理としては、
それぞれの3乗が、x3, y3, z3とするならば、
ここでも、x≧y≧z が生かされて、
x3+y3+z3 == 3L ...(1)
x3-y3+z3 == 3L ...(2)
x3-y3-z3 == 3L ...(3)
-x3+y3+z3 == 3L ...(4)
の4パターンだけチェックすればよいだろう。
ただ、ループが指数的に多くなるのに、たった一つの (x, y, z) = (1, 1, 1) だけのために(1)を毎回比較する必要性はないだろう。
さて、この処理のループは何回転するかというと、
1063 = 10216
ですので、結構な時間がかかることがわかります。
試しに、自分の第二世代Core i7のボロパソコンで1000で回してみたところ4秒掛かりました。
おそらく、1万にすると、1000倍されるので4000秒、仮に短く見積もって1時間としよう。
10万にすると、更に1000倍されるので、1000時間、仮に短く見積もって41日間としよう。
100万にすると、更に1000倍されるので、41000日間、仮に短く見積もって112年です。
まぁ、1000くらいでやめておくのが無難なようです。
(x, y, z) = { (1, 1, 1), (4, 4, -5) }
と容易に解が2つ見つかるかと思います。
この程度であれば、プログラミングや電卓などを使用せずとも、手計算で計算出来る範囲でしょう。
先のレンジでは、この2個しかみつかりません。
では、これ以外に解はないのでしょうか?
どうやら、クラウドスパコンを使って計算していた数学者がいて、
(x, y, z) = (569936821221962380720,
-472715493453327032,
-569936821113563493509)
という解を見つけたようです。
計算時間は全世界で約400万時間だそうです。
ピンと来ませんので単純計算すると、456年と4ヶ月程度です。
それにしても3個目の解は、前の2個に比べて、随分と間が空きましたね。
こんなに間が開いていると、こんな解があるとは思えなくなっていくでしょうし、プログラムを途中で中断したりするレベルでしょう。
Windowsの付属の電卓では桁あふれするだろうから、多倍長演算プログラムで計算させてみます。
5699368212219623807203 =
185131426470358721030003064550489120286063150089838997749248000
(-472715493453327032)3 =
-105632974740929786381946720746443347962500088804576768
(-569936821113563493509)3 =
-185131426364725746289073278168542399539619802127338908944671229
ちゃんと3になりますね。
引退してしまったが、スパコンの京(ケイ、10ペタフロップス)でやったら、どれくらいでこの解を見つけるんでしょうね。
また、2021年ごろから運用される富岳(ふがく)は京の100倍程度の性能らしいですね。
あぁ、自分が仕掛っている例のプログラムもスパコンで計算させたいくらいです。
ではでは
↧
x³+y³+z³=3を満たす整数x, y, zの3個目の解が見つかるもやばい
↧