合計がNになるすべての4乗の組み合わせをどれくらい早く見つけることができますか?
Stack Overflowで質問がありました(こちら): 整数与えられると、方程式A 2 + B 2 + C 2 + D 2 = Nを解くA 、B 、CおよびDNNNの整数値のすべての可能な組み合わせを出力します。A,B,CA,B,CA,B,CDDDA2+B2+C2+D2=NA2+B2+C2+D2=NA^2+B^2+C^2+D^2 = N この質問は、もちろん、バチェットの数論における推測(彼の証明からラグランジュの四乗定理と呼ばれることもある)に関連しています。単一の解決策を見つける方法を議論するいくつかの論文がありますが、特定のNのすべての解決策を見つけることができる速さ(つまり、すべての順列ではなく、すべての組み合わせ)を見つけることについて話すものを見つけることができませんでした。NNN 私はそれについてかなり考えてきましたが、時間と空間で解決できるように思われます。ここで、Nは望ましい合計です。しかし、主題に関する事前情報が不足しているため、それが私の側の重要な主張なのか、ささいな、明白な、またはすでに知られている結果なのかわかりません。O(N)O(N)O(N)NNN それで、問題は、与えられたすべての4乗和をどれだけ速く見つけることができるかということです。NNN OK、私が考えていた(ほぼ)O(N)アルゴリズムです。最初の2つのサポート関数、最も近い整数平方根関数: // the nearest integer whose square is less than or equal to N public int SquRt(int N) { return (int)Math.Sqrt((double)N); } そして、0からNまでのすべてのTwoSquareペアを返す関数: // Returns a list of …