2

我知道这可能会被否决,但 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);
4

1 回答 1

2

第一种方法不正确。更正后的版本将是:

    <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--直到找到最大的素数。

于 2013-07-31T20:55:58.377 回答