-3

配列をループして、その中の素数の数を数えようとしています...十分に単純ですが、何かが欠けています...

count = 0;
for(i =0; i<5; i++)
{
    flag = true;    // is prime
    for (j=2;j<a[i];j++)
    {
        if(a[i] % j == 0)
        {
            flag = false;
        }


    }

    count ++;
}
4

5 に答える 5

5

の前に条件がありませんcount++

于 2012-11-03T21:45:27.400 に答える
5

フラグが false の場合でもカウントを増やします。

于 2012-11-03T21:45:50.177 に答える
3

コードをこれに変更します

flag = true;    // is prime
for (j=2;j<a[i];j++)
{
    if(a[i] % j == 0)
    {
        flag = false;
        break;
    }

}
if (flag) {
   count++;
}   

非素数をカウントしたら、ループから抜け出すこともできます-繰り返しテストしても再び非素数になることはありません

于 2012-11-03T21:47:35.297 に答える
0

Blah は(flag == true)count ++; の前に条件を付けて修正しました。

于 2012-11-03T21:51:53.840 に答える
0

「count++;」行の「if」を忘れました

count = 0;
for (var i = 0; i < 5; i++)
{
    var flag = true;    // is prime
    for (var j = 2; j < a[i]; j++)
    {
        if (a[i] % j == 0)
        {
            flag = false;
            break; //this break will avoid useless process
        }

    }

    // only when the flag is false that the current number is prime.
    if(!flag) count++;
}

しかし、それを行うより良い方法は次のとおりです。

count = 0;
for (var i = 0; i < 5; i++)
{
    for (var j = 2; j < a[i]; j++)
    {
        if (a[i] % j == 0)
        {
            count++; // don't need a variable flag, put increment here.
            break;
        }
    }
}
于 2012-11-03T22:12:59.720 に答える