0

私はJSを学んでいて、素数 < 100 を出力するスクリプトに出くわしました。しかし、それがどのように機能するかを完全に理解したかどうかはわかりません。誰かがそれを説明できれば、私はうれしいです。:)

だからここにあります:

for (var counter = 0; counter <= 100; counter++)
{
    for (var i = 2; i <= counter-1; i++)
        if (counter%i === 0) break;
    if(i === counter)
        console.log(counter);
}
4

3 に答える 3

1
/* For every number from 0 to 100, do the following: */
for (var counter = 0; counter <= 100; counter++)
{
    /* Loop through values from 2 to 1 before the counter. */
    for (var i = 2; i <= counter-1; i++) {
        /* if the remainder of dividing counter by the current value of `i` is zero,
         * we know we don't have a prime, so break out of the loop:
         */
        if (counter%i === 0) break; 
    }
    /* If the loop completed and `i` is equal to the counter, that means counter is not
     * divisible by anything except for 1 and itself, making it prime
     */
    if(i === counter)
        console.log(counter);
}
于 2013-04-01T19:57:46.933 に答える
1

素数は、定義上、それ自体と 1 でのみ割り切れます。外側のループfor var(counter = 0; ...)は、0 から 100 までの数値をループします。次に、内側のループfor (var i = 2; ...)は、2 とカウンターの値の間のすべての数値で外側の数値を除算しようとします。それらのいずれかが剰余なしで数値を除算すると、ループが壊れます。それがif (counter%i === 0) break;ラインです。ループから抜け出した場合 and i === counter、それは素数であり、そうでない場合は素数ではありません-定義によります。

于 2013-04-01T19:55:58.673 に答える
0

あなたがどれだけ JavaScript を知っているかはわかりませんが、これらのいくつかは本当に基本的なものかもしれません。

まず、素数とは、約数が 1 とそれ自体だけの数であることを思い出してください。

counterしたがって、最初の行は、この数値を保持する変数として、0 から 100 までループすることを示しています。

次の行for (var i = 2; i <= counter-1; i++)は 2 からcounter-1 までループし (1 と を除外していることに注意してくださいcounter)、 を使用iしてこの数値を保持します。

次に、が で割り切れるif (counter%i === 0) break;かどうかをテストします。剰余演算子は剰余を返します (長い除算のように) 。剰余が(は よりも厳密な等式ですが、それはまったく別の答えです) の場合、それは で割り切れるため、素数ではありません。このステートメントは、最も内側のループ (つまり、 を超えるループ) を終了するように指示するため、プログラムはインクリメントして続行します。counteri%11 % 32counter % i0=====counteribreakicounter

前の行が のどの値でも壊れていない場合、icounter素数です。具体的には、ループ本体の最後でiがインクリメントされ (現在は に等しいcounter)、ステートメントi <= counter-1は false と評価され、ループは終了します。これi === counterで true にconsole.log(counter)なり、コンソールにこの値が表示されます。

于 2013-04-01T19:57:29.310 に答える