Euler #3 javascript error



我知道这可能会被否决,但我已经24小时感到非常沮丧,查看其他Euler 3线程并没有帮助我解决这个问题。有人能帮我处理代码吗?我想我已经很接近了。

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

//以上部分正确地发现了一个数字是否为素数。问题出在下面的部分。

var holder = 0;
function getBiggestPrime (end) {
    for (i=2; i<=Math.sqrt(end); i++) {
        while (is_prime(i) && (end%i===0)) 
            holder = i;
            return holder;
    }
}
getBiggestPrime(13195);
console.log(holder);

第一个方法不正确。修正后的版本为:

    <script>
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;
}

//第二种方法也有同样的问题-返回应该在for循环结束后(也可以将while改为if):

function getBiggestPrime (end) {
    var holder = end;
    for (var i=2; i<=Math.sqrt(end)+1; i++) {
        if (is_prime(i) && (end%i===0)) 
            holder = i;            
    }
    return holder;
}

演示的链接。

关于第二部分(如果我正确理解你在寻找什么),你应该从以下方面开始:
i = Math.sqrt(end)i--一起下降,直到找到最大素数。

最新更新