Euler7JavaScript

Euler7JavaScript,javascript,Javascript,有人能帮我写这段代码吗?应该是第10001个素数。我知道is_prime函数用于测试一个数字是否为prime,因为我在前面的问题中成功地使用了这段代码。现在我只是尝试在for循环中调用它,直到计数器达到我想要的,同时将最新的数字存储到变量“holder”中,并在末尾打印holder function is_prime(num) { if (isNaN(num)) return false; for (var i=2; i<=Math.sqrt(num); i++) {

有人能帮我写这段代码吗?应该是第10001个素数。我知道is_prime函数用于测试一个数字是否为prime,因为我在前面的问题中成功地使用了这段代码。现在我只是尝试在for循环中调用它,直到计数器达到我想要的,同时将最新的数字存储到变量“holder”中,并在末尾打印holder

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();
函数为素数(num){
if(isNaN(num))返回false;

对于(var i=2;i如果省略
If
块的括号,则实际上只有第一行是块的一部分。当前
If
语句的行为如下:

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

counter += 1;

此外,循环跳过了第一个素数2。

计数器的作用域错误。 对于For循环,您可以初始化
计数器=1;
以说明2并保持原样

函数为素数(num){
if(isNaN(num))返回false;
var sq=数学sqrt(num);

对于(var i=2;i可能重复的循环我认为循环不能正常工作。如果我将循环for语句中的“counter”更改为不同的数字,我的结果不会改变。@CBIII感谢您指出这里,我没有找到那个。似乎他使用了dif方法,但我仍然不明白为什么我的代码不能正常工作!您有一个范围问题。counter当您通过省略
var
sq
放入全局范围时,它将递增。
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();