※本記事では「くどー問題」を扱います。問題の内容に関しては以下のリンクをご参照ください:
この問題の解決を目指したMathlog記事を挙げておきます:
適宜ご参照ください。
Y.K.さんの方法
「くどー問題」に関し、
Y.K.さん
から有益なコメントを頂きました。
これまで私はくどー問題の数値計算を行ってきました。今までのコードでは、3乗和と1乗和を愚直に計算していました。一方Y.K.さんの提案された方法を用いると、3乗和、またそもそも3乗を計算する必要もなくなります。
整数の集合()から個の数字を削除した集合の要素の3乗和と1乗和をそれぞれとします。ある時点でが成立したとします。回目にを削除することにします(はかつこれまでに削除されていない数とする)。このとき
が成立します。最後の式第2項が整数ならに対しては削除できます。ここで
です。
このことから、から始めて、およびそれまでに削除されていない数をに代入して上式第2項を計算し、これが整数か否かを判断することで次のを再帰的に求めればくどー問題が解けることがわかります。あるの組に対し上式第2項が整数となるようなは一般には複数存在するため、は複数のに対してそれぞれ存在することに注意してください。によってはの組がに対し指数的に増加し計算量が膨大になります。
この方法を用いて数値計算コードを作成すると、以前のコードと比較し計算が非常に高速化されます。前回はまででしたが、今回はのに関して計算を行いました。
結果は今のところ最後まで削除できるは(以外)見つかっていません。ただし計算量が多くなるために探索が終わっていないが計37個あります。これらに最後まで削除できる数が存在する可能性があることに注意してください。
以下が vs のグラフです(※: 削除可能な数の存在する削除回数の最大値。Ref.kudoprob参照のこと):
における(またはの下限)。青い点が。黄色い三角の点は計算が終わっていないに対するの下限値。緑の線はの線であり、これにが乗ればそのは最後まで削除可能。
さらにこのグラフのデータにアクセスできるグラフも載せておきます:
インタラクティブなグラフ
データにカーソルを合わせると、その点のが表示されます。
この図からわかることに関しては以前の記事Ref.kudoprobをご参照ください。
まとめ
Y.K.さんの提唱する方法を数値計算で実装することでコードを高速化しました。これを用い、の範囲での計算を行いました。今のところ以外には最後まで削除可能なは見つかっていません。
実はY.K.さんとの議論の中で理論的にわかったこともあります。これに関しては次の記事で述べます。
おしまい。