問題タブ [hardy-ramanujan]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - タクシー数を探す
n
最初のタクシー番号を見つけます。与えられた値n
。最初のn個のタクシー数を見つけたいと思います。タクシーは、2つの完全な立方体の合計として複数の方法で表現できる数です。
( 「タクシー数」と呼ばれる2つの関連するが異なるセットがあることに注意してください:複数の 方法で2つの立方体の合計、および 方法で2つの正の整数立方体の合計である最小の数
n
。この質問は前者のセット、後者のセットには最初の6つのメンバーしか知られていないため)
例えば:
アルゴリズムの大まかな概要または問題へのアプローチ方法のCスニペットをお願いします。
java - 比較的適切な contains() ソリューションを備えた最小の Java 構造
わかりました、ここに詳細があります: 私は Java で Nth Hardy's Taxi 番号(2 つの立方数の 2 つの異なるセットで合計できる数) を見つけるクラスを作成しています。ディスカバリー自体はダウンしていますが、スペースを節約する必要があります。そのためには、contains() のようなメソッドを比較的簡単に使用または作成できる、可能な限り最小のデータ構造が必要です。私の現在のソリューションは確かに時間制限内でうまく計算できるので、速度については特に心配していません。
つまり、データ構造には次のものが必要です。
- contains() メソッドを比較的簡単に実装できるようにするため
- 少量のメモリを使用するには
- 非常に多くのエントリを保存できるようにするため
- プリミティブな long 型で使いやすいように
何か案は?ハッシュ マップから始めて (正確さを確保するために、合計につながる値をテストする必要があったため)、信頼できる答えが保証されたら、ハッシュ セットに移動しました。
スペースを節約する方法に関する他の一般的なアイデアは大歓迎です!
質問に答えるのにコードは必要ないと思いますが、興味がある場合はここにあります。
c++ - C++ の式に一致する最小の整数を見つける
重複の可能性:
Hardy Ramanujan Numbers の検索
最小の自然数を見つける必要がありますx
。
そして、(k, l, i, j)
すべて異なっている必要があります。
次の 4 つの for ループを試しましたが、変数が無限に増えてしまい、正しい解にたどり着けませんでした...
java - Hardy-Ramanujan nth number finder をより効率的にする
n番目のHardy-Ramanujan数(2つの立方体の合計として複数の方法で表現できる数)を見つけるアルゴリズムを作成しようとしました。ただし、基本的にすべてのキューブを別のキューブとチェックして、別の 2 つのキューブの合計に等しいかどうかを確認しています。これをより効率的にするためのヒントはありますか?私はちょっと困惑しています。
java - na Ramanujan 数ですか? 2^63 付近の値でエラーが発生するのはなぜですか?
数値が与えられた場合、それがラマヌジャン数であるかどうかをテストします (このコースでは、2 つの異なる方法で 2 つの立方体の合計として定義されています)。n^(1/3) 時間で実行する必要があります。
私のコードは動作しています - 時々。テスト値が 2^63 -1 に近づくと、ランダム エラーが発生します。
奇妙なことに、別のバグを修正するためにカウンターの開始値を変更する前に、その範囲の数値についてこのテストに合格していました。これがなぜなのか誰か教えてもらえますか?
a^3 の値を作成するために for ループを設定しました。
次に、b=(na^3)^(1/3) の値を設定します。
次に、b が整数かどうかをテストします。もしそうなら、ループを壊してください。
コードを機能させるためにここに if テストを挿入しましたが、これが必要な理由はわかりません。それがこの質問の要点です。この if ステートメントは、n=2^63 より上と下の値に対して 2 つの異なる for ループを設定します。
n < 2^63 の 2 番目のループは、c=a+1 で始まるため、重複しません。最初のものと同じです。
n > 2^63 の 2 番目のループは、c=a で始まります。
なぜこれが違いを生むのでしょうか?小さい数値と大きい数値で同じコードが機能しないのはなぜですか?
幼稚なコードで申し訳ありません。私は始めたばかりで、コースでは多くの機能が立ち入り禁止になっています。(たとえば、floor() を使用できず、独自の関数を作成することも許可されませんでした)。
大きい数値と小さい数値を区別する必要がある理由についての洞察はありますか?