数学の難問
半年ほど前、ネットで見つけた数学の問題に挑戦しましたが、正答に辿り着けませんでした😿(この記事の最後にリンクあり)
そして、解答を見て仰天、現実的には解答不能な難問でした。
難問第二弾
類似の問題を見つけたのでリベンジです!
その問題とは…
3組の解を求められています。
1番目の解 〜初級問題
ひとつの解は自明です。
(x,y,z)=(1,1,1)です。
即ち、1³+1³+1³=3
2番目の解 〜中級問題
パソコンを使ってしらみつぶしに探索します。
x³+y³+z³=3 となる整数x, y, zを求めるソースプログラムをC言語で書きました。
#include <stdio.h>
#include <math.h>
int main() {
int x, y, z;
int limit = 100; // 探索範囲
for (x = -limit; x <= limit; x++) {
for (y = -limit; y <= limit; y++) {
for (z = -limit; z <= limit; z++) {
if (pow(x, 3) + pow(y, 3) + pow(z, 3) == 3) {
printf("x = %d, y = %d, z = %d\n", x, y, z);
}
}
}
}
return 0;
}
調べる変数の範囲を大きくしていくと、プログラムが3重のnest(入れ子)になっているため探索時間が指数的に増加します。パソコンの能力を考慮してx, y, zの探索範囲は −100〜100としました。
このプログラムをコンパイルして実行すると…
パソコンは、1番目の解(x=y=z=1)に続いて、x=4、y=4、z=−5という解を吐き出しました。(4³ + 4³ +(−5³)= 3)
しかし、3番目の解は、−100〜100の範囲にはありませんでした。
前回の難問と同じく、パソコンの能力が足りないようです。
ここで悪あがきをしても詮無いことを前回の難問で学習したので、直ちに解答を調べることにしました😿
3番目の解 〜解けたら天才!
この問題には解答が併記されていないのでGoogleで検索しました。
キーワードを「x3+y3+z3 = 3」として検索をかけるといくつかヒットしました。
そのうちの一つの文献による、驚愕の第3の解は…
x = 569936821221962380720
y = −472715493453327032
z = −569936821113563493509
このとき、x³+y³+z³=185131426470358721030003064550489120286063150089838997749248000+(-105632974740929786381946720746443347962500088804576768)+(-185131426364725746289073278168542399539619802127338908944671229)=3
この解をボクのパソコンで見つけるには1万年くらい探索しないといけないかも。
それ以前に、符号付き64ビットの整数の範囲で探索したとしても、扱える整数は±9223372036854775807
が限界です。なので解(3乗する前の値)の探索は7桁までにとどまります。
ボクのパソコンだけではなく、最新鋭のパソコンをもってしても正答に辿り着くことは困難でしょう。
この3番目の解を発見した人はどのようにして見つけたのだろう?
ラマヌジャンのように神のお告げでもあったのかなぁ😺
▼前回の難問
難問に挑戦してみたらとんでもない結末に😱 - こに〜 の ざれごと