4

1 から 100 までのすべての素数をリストする JavaScript 素数ジェネレーターを作成しようとしています。これは一般的なプログラミング作業であり、Web には豊富なソリューションがあることを知っています。私の質問は、なぜ私のソリューションが空の配列になるのですか? コードは次のとおりです。

var primeNumbers = [];
for (var x=2; x<101; x++)
    if (x%2 === 0) 
    {
        break;
    }
    else 
    {
        for (var y=2; y<101; y++) 
        {
            if (x/y > 1) 
            {
                break;
            }
            else 
            {
                primeNumbers.push(x);
            }
        }
    }
};
console.log(primeNumbers);
4

4 に答える 4

4

最初に行うことは、 if を壊すことだからですx % 2 === 0。これはすぐに真実です。 breakループを抜けます。欲しいと思いますcontinue

于 2013-03-31T17:36:20.193 に答える
2

問題 1:のときにブレークするx%2 === 0ので、すぐにループを抜けます。条件を逆にして、コードをループに直接入力します。

これを置き換えます:

if (x%2 === 0) {
  break;
}
else {

と:

if (x%2 !== 0) {

問題 2: if の内側のループを終了していますx/y > 1。これは condition と同じであるx > yため、常に内側のループをすぐに終了します。代わりに、内側のループを 2 から 1 未満まで実行しますx

 for (var y=2; y<x; y++) {

問題 3: 1で割って比較する代わりにxyモジュロ演算子を使用する必要がありますx%y。結果がゼロの場合、 はx素数ではありません。

問題 4:内側のループ内に素数を追加しているため、素数が 1 回だけでなく、ほとんどの数が複数回発生します。

内側のループで何が起こっているかを追跡するために、変数を追加する必要があります。内側のループのどのチェックもゼロでない場合は、素数のリストに追加できますx

于 2013-03-31T18:01:53.497 に答える