有人能帮上忙吗?它应该得到10001个素数。我知道is_prime函数可以测试一个数字是否是素数,因为我成功地使用了这段代码来解决前面的问题。现在,我只是尝试在一个for循环中调用它,直到计数器达到我想要的目标,同时将最近的数字存储在一个变量' 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();发布于 2013-08-03 05:21:04
计数器的作用域错误。对于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-03 05:19:58
如果省略了if块的括号,实际上只有第一行才是块的一部分。当前的if语句的行为如下:
if (is_prime(k)) {
holder = k;
}
counter += 1;另外,循环跳过2,第一个素数。
https://stackoverflow.com/questions/18029510
复制相似问题