我知道这可能会被否决,但我已经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--
一起下降,直到找到最大素数。