0

有人可以帮忙处理这段代码吗?它应该得到第 10,001 个素数。我知道 is_prime 函数可以用来测试一个数字是否是素数,因为我成功地使用了这个代码来解决之前的问题。现在我只是试图在 for 循环中调用它,直到计数器达到我想要的,同时将最新的数字存储到变量“持有人”并在最后打印持有人。

function is_prime(num) {
    if (isNaN(num)) return false;
    for (var i=2; i<=Math.sqrt(num); i++) {
        if (num % i === 0) {
            return false;
        }
    }
    return true;
}

function getBigPrime () {
var holder = 0;
var counter = 0;
    for (var k=3; counter<=10000; k+=2) {
        if (is_prime(k)) 
            holder = k; 
            counter += 1;
    }
    console.log(holder);
}

getBigPrime();
4

2 回答 2

2

如果省略if块的括号,则只有第一行实际上是块的一部分。您当前的if语句行为如下:

if (is_prime(k)) {
    holder = k; 
}

counter += 1;

此外,您的循环会跳过第一个素数 2。

于 2013-08-03T05:19:58.357 回答
0

您的计数器存在范围错误。对于您的 for 循环,您可以初始化counter = 1;为 2 并保持原样

http://jsfiddle.net/XtTYm/2/

function is_prime(num) {
    if (isNaN(num)) return false;
    var sq = Math.sqrt(num);
    for (var i=2; i<=sq; i++) {
        if (num % i === 0) {
            return false;
        }
    }
    return true;
}

    function getBigPrime () {
    var holder = 0;
    var counter = 1;
        for (var k=3; counter<=10000; k+=2) { 
            if (is_prime(k)){ 
                holder = k; 
                counter += 1; // should be inside the if
            }
        }
        console.log(holder);
    }

    getBigPrime();
于 2013-08-03T05:21:04.347 回答