-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

即使标志为假,您也会增加计数。

于 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

(flag == true)Blah 用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 回答