可能是一个关于 isPrime 函数的愚蠢问题
Probably a silly question regarding an isPrime function
出于某种原因,我的 isPrime 函数不适用于 3 的倍数。
console.log(isPrime(9))
returns我true
,当数明显不是素数。我已经盯着逻辑看了一段时间,多次 google 搜索没有结果,所以我假设这是一些非常愚蠢的疏忽。我可能可以复制并粘贴以使其工作,但我正在尝试建立正确的理解。
function isPrime(num){
for (let i = 2; i < Math.sqrt(num); i++){
if (num % i == 0){
return false;
}
return true;
}
}
console.log(isPrime(9));
而不是 Math.sqrt
你应该写 num
.
i <
需要替换为i <=
- 我添加了一个变量来存储
Math.sqrt
调用,因为每次迭代都是一项昂贵的操作。
- 您的第一次迭代 returns
true
或 false
立即。您应该从 for
循环中完全删除 return true
以让它迭代。
function isPrime(num){
let max = Math.sqrt(num);
for (let i = 2; i <= max; i++){
if (num % i == 0){
return false;
}
}
return true;
}
console.log(isPrime(1));
console.log(isPrime(2));
console.log(isPrime(3));
console.log(isPrime(4));
console.log(isPrime(5));
console.log(isPrime(7));
console.log(isPrime(8));
console.log(isPrime(9));
console.log(isPrime(10));
出于某种原因,我的 isPrime 函数不适用于 3 的倍数。
console.log(isPrime(9))
returns我true
,当数明显不是素数。我已经盯着逻辑看了一段时间,多次 google 搜索没有结果,所以我假设这是一些非常愚蠢的疏忽。我可能可以复制并粘贴以使其工作,但我正在尝试建立正确的理解。
function isPrime(num){
for (let i = 2; i < Math.sqrt(num); i++){
if (num % i == 0){
return false;
}
return true;
}
}
console.log(isPrime(9));
而不是 Math.sqrt
你应该写 num
.
i <
需要替换为i <=
- 我添加了一个变量来存储
Math.sqrt
调用,因为每次迭代都是一项昂贵的操作。 - 您的第一次迭代 returns
true
或false
立即。您应该从for
循环中完全删除return true
以让它迭代。
function isPrime(num){
let max = Math.sqrt(num);
for (let i = 2; i <= max; i++){
if (num % i == 0){
return false;
}
}
return true;
}
console.log(isPrime(1));
console.log(isPrime(2));
console.log(isPrime(3));
console.log(isPrime(4));
console.log(isPrime(5));
console.log(isPrime(7));
console.log(isPrime(8));
console.log(isPrime(9));
console.log(isPrime(10));