0

X から Y までのすべての素数を見つけて出力するための小さなスクリプトを作成しています。

var numX = prompt('Enter a number greater than 0:','');
var numY = prompt('Enter a number greater than ' + numX + ':','');

while (numX <= numY) {
    if (numX == 1 || numX == 2 || numX == 3) {
    document.write(numX + '</br>');
    } else if (numX % 2 === 0 || numX % 3 === 0 || numX % 5 === 0 || numX % 7 === 0){
    document.write();
    } else {
    document.write(numX + '</br>');
    }
    numX++;
};

これは、最初の数値が 1 である限り問題なく機能します。ただし、最初の数値が 1 より大きい場合は、何も出力されません。これがこの質問に適切なフォーラムかどうかはわかりませんが (おそらく数学フォーラムですか?)、誰かが私を助けてくれる機会があれば、ここで質問しようと思いました. また、ふるいがこれを行うためのより良い方法であることも知っていますが、最初に while ループとしてこれを理解しようとしました。どんな助けでも大歓迎です!

4

4 に答える 4

3

あなたが何をしようとしているのかは理解できますが、エラトステネスのふるいを見ることを強くお勧めします。非常に大きな数を扱うことにした場合に備えて、これらのことを計算するためのさまざまなアルゴリズムを知っておく必要があります。今のやり方は狭い範囲ではうまくいくかもしれませんが、広い範囲ではうまくいきません。

また、この Stackoverflow の質問はこれと非常によく似ており、その回答は非常によくできていると思います。

250 未満の素数の和を求める

于 2012-11-30T07:15:39.743 に答える
0

OK、私はこの質問をすることに銃を飛ばしたことがわかりました。私は、else if ステートメントを機能させることにもっと関心を持っていたので、私の数式に深刻な欠陥があることにさえ気付かなかったのです。

問題は、2 番目の変数にある可能性があります。最初の変数が 1 の場合、2 番目の変数は任意の数値になります。ただし、最初の変数が 1 より大きい場合、2 番目の変数は 100 未満でなければなりません。そうしないと機能しません。

于 2012-11-30T07:37:04.753 に答える
0

ここで任意のオプションを試すことができます: http://www.javascripter.net/faq/numberisprime.htm

于 2012-11-30T07:12:49.957 に答える
0

こんにちは、コードにビット変更を追加しました (5 と 7 の素数の条件を追加) とその動作...

var numX = prompt('Enter a number greater than 0:','');
var numY = prompt('Enter a number greater than ' + numX + ':','');

while (numX <= numY) {
    if (numX == 1 || numX == 2 || numX == 3 || numX == 5 || numX == 7) {
    document.write(numX + '</br>');
    } else if (numX % 2 === 0 || numX % 3 === 0 || numX % 5 === 0 || numX % 7 === 0){
    document.write();
    } else {
    document.write(numX + '</br>');
    }
    numX++;
};

ここでデモをチェック

于 2012-11-30T07:15:26.210 に答える