2 つの素数edit: または素数の 3 乗の積である数値を探しています。数値が小さいので、2 から 500 までの素数の短い表を作成するだけで済みます。次に、2 から始めて、上限を超えるまで、各素数にその上の各素数を掛けます。
編集:これは宿題ですか?もしそうなら、私はおそらくすでに言い過ぎました。そうでない場合、答えが意味をなさない場合は、コードまたは疑似コードを提供できます。
編集: ありがとう、ダニエル・フィッシャー: 素数の立方体を見逃していました。これらを確認して、外側のループに含めることができます。(素数にその上の各素数を掛ける前に、その立方体が目的の範囲内にあるかどうかを確認してください。)
一般的:
for ( p1 is a prime in your list, except for the last) {
if p1 cubed is in your range, add it to the answer
for (p2 is a prime in your list greater than p1) {
if p2*p1 is in your range, add it to the answer
//optimization: break when you know you won't find any more
}
}
// optimization: calculate the ranges of p1 and p2 to be included
// before you start each loop
// (probably only worthwhile if you raise the limit to something
// much larger than 1000)
確かに、このスケールの数値には十分な速さです。1 ミリ秒未満で完了しました (0 から 1000 までの 292 の数値を見つけるために。ハードコードされた素数を使用しました --- この範囲の入力には 95 個しか必要ありません)。