如果在某个地方对此进行了报道,我们深表歉意。我在这里搜索了很多素数函数的答案,但似乎找不到问题的答案。我拼凑了一个函数来检查一个数字是否为素数,然后我对100以下的数字运行for循环,并打印出素数。我的代码不打印素数。它似乎开始打印素数,但随后在那里投了一个9,然后情况变得更糟。
我发现了与我的代码似乎完全相同的代码,它成功地将素数打印到了控制台上。下面是我的代码;我的错误在哪里?为了记录在案,我正在使用jsfiddle,而且我在这方面很新。
function isPrime(number) {
if (number < 2) {
return false;
}
for (var i = 2; i < number; i++) {
if (number % i == 0) {
return false;
} else {
return true;
}
}
};
for (var i = 0; i < 100; i++) {
if(isPrime(i)) {
console.log(i);
}
}
一旦number
不能被i
整除,就返回true。将您的return true
移到最后:
function isPrime(number) {
if (number < 2) return false;
for (var i = 2; i < number; i++) {
if (number % i == 0) return false;
}
return true;
}
您只想在没有找到划分number
的i
时返回true。
function isPrime(number) {
var result = true;
if (number < 2) {
result = false;
}
for (var i = 2; i < number; i++) {
if (number % i == 0) {
result = false;
}
}
return result;
};
for (var i = 0; i < 100; i++) {
if(isPrime(i)) {
console.log(i);
}
}
您的问题在中
if (number % i == 0) {
return false;
} else {
return true;
}
当你在每种情况下(真或假)都返回一些东西时,你的算法在每个第一个周期都会退出。
您不应在else语句中返回任何内容:
if (number % i == 0) {
return false;
} else {
// continue the for statement.
}
并使函数在的之后返回true。
开玩笑的是,一个更快的算法:
function isPrime(number) {
var primes=[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97];
if (primes.indexOf(number) > -1) {
return true;
} else {
return false;
}
};
function isPrime(number) {
var check=true;
if (number < 2) {
return false;
}
for (var i = 2; i < number; i++) {
if (number % i == 0) {
check=false;
}
}
return check;
};
for (var i = 0; i < 100; i++) {
if(isPrime(i)) {
console.log(i);
}
}