javascript - 如果数字是 JavaScript 中的质数,则获取 bool 值

标签 javascript function if-statement

我正在尝试解决这个问题,我需要根据数字在控制台上打印 true 或 false(如果数字是质数则为 true,否则为 false)。我似乎找到了解决方案,但我知道某处存在错误,因为如果更改 2 个 isPrime 变量的 bool 值,我会得到不同的答案。

问题如下: 如果 num 是质数则返回 true,否则返回 false。

提示:质数只能被其自身和 1 整除 提示 2:您可以使用 for 循环解决此问题。

注意:0 和 1 不被视为质数

输入示例:

1 7 11 15 20

输出示例:

假的 真的 真的 错误的 假的

我的代码:

function isPrime(num){
  let isPrime = '';
  for(let i = 2; i <= Math.sqrt(num); i++){
    if(num % i === 0){
      isPrime = false;
    } else {
      isPrime = true;
    }
  }
  return isPrime;

}

isPrime(11);

最佳答案

你们很亲近。我将建立在您的解决方案之上。一旦检测到数字不是质数,就需要返回 false。这避免了我们进行额外的冗余计算。

您也没有考虑到第一个提示。

Hint - Note: 0 and 1 are NOT considered prime numbers

为此,如果数字为 0 或 1,您可以简单地返回 false

function isPrime(num) {
  if (num === 0 || num === 1) return false;
  for (let i = 2; i <= Math.sqrt(num); i++) {
    if (num % i === 0) return false;          
  }
  return  true;
}

同样在您的代码中,您使用变量 isPrime 来跟踪 bool 值,同时使用空字符串对其进行初始化。这是不正确的。 Javascript 允许这样做,因为它是弱类型的,但这是一种误导。所以将来如果你为 bool 值定义一个变量,不要用字符串初始化它;)


进一步处理您的评论。如果您确实想坚持在代码中使用标志,则可以使用 true 而不是空字符串来初始化 isPrime

这样你就可以摆脱 for 循环中的 else 部分,从而使代码更短。我使用了 @Commercial Suicide 提供的代码(顺便说一句,他确实说有更优雅的解决方案)作为示例:

function isPrime(num) {
  let flag = true;
  let isPrime = true;
  if (num === 0 || num === 1) return false;
  if (num === 2) return true;
  for (let i = 2; i <= Math.sqrt(num); i++) {
    if (flag) {
      if(num % i === 0) {
        isPrime = false;
        flag = false;
      }
    }
  }
  return isPrime;
}

const numbers = [1, 7, 11, 15, 20];
const booleans = [false, true, true, false, false];

numbers.forEach((item, i) => {
  if (isPrime(item) === booleans[i]) {
    console.log("CORRECT");
  } else {
    console.log("WRONG");
  }
})

然后您可以更进一步,删除 flag 变量。

function isPrime(num) {
  let isPrime = true;
  if (num === 0 || num === 1) return false;
  if (num === 2) return true;
  for (let i = 2; i <= Math.sqrt(num); i++) {
    if (isPrime) {
      if(num % i === 0) {
        isPrime = false;
      } else {
        isPrime = true;
      }
    }
  }
  return isPrime;
}

但现在应该更加清楚,正如我最初指出的那样,这些标志实际上是多余的。只要检测到数字不是质数,就立即返回 false 以避免进一步不必要的循环运行。从我多年来使用 JavaScript 的经验来看,我可以看出我们正在走向函数式编程的思维方式。它通常有助于避免变量突变。

关于javascript - 如果数字是 JavaScript 中的质数,则获取 bool 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47480882/

相关文章:

C# 反射 if : 0 equals 1?

javascript - 如何在特定滚动位置多次添加/删除类/id?

javascript - 在 react 中路由后滚动到 View 中

python - 在 Cython 的 cdef 语句中使用 scipy.integrate.quad?

vb.net - 如何捕获函数返回KeyValuePair(Of Date,Date)中的错误

c - 在 C 中评估条件语句中的结构

javascript - 来自表单输入的 Reactjs setState 问题

javascript - 将两个不同对象键的值合并为一个对象键值

r - 基于算法进行预测时出错

php忽略重定向if语句