【问题标题】:Javascript Prime Number Function Console IssueJavascript素数函数控制台问题
【发布时间】:2015-12-23 13:56:40
【问题描述】:

抱歉,如果这在某处有所涉及。我在这里搜索了很多素数函数的答案,但似乎找不到我的问题的答案。我拼凑了一个函数来检查一个数字是否为素数,然后我正在为 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);
  }
}

【问题讨论】:

  • 这种确定素数的缓慢方法的一个“速度”改进......只需要循环到Math.sqrt(number); - 虽然如此小的数字不是问题

标签: javascript primes


【解决方案1】:

只要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。

【讨论】:

  • 谢谢!这使它工作!另外,Jaromanda X 好点,我也会解决这个问题。
  • 抱歉,我的想法不正确,评论已删除
  • @jaromanda-x 谢谢。如果它来自您,您也可以删除反对票;-)
  • @Frances 如果它有效,欢迎您接受答案。
【解决方案2】:

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);
  }
}

【讨论】:

  • 是的,您已更正;但是,当您将 return false 替换为 result=false 时,在速度方面会变得更糟。
【解决方案3】:

你的问题在

if (number % i == 0) { 
  return false;
} else {
  return true;
}

当您在每种情况下(真或假)返回某些内容时,您的算法会在每个第一个周期退出。

你不应该在 else 语句中返回任何东西:

if (number % i == 0) { 
  return false;
} else {
  // continue the for statement.
}

并让函数在for之后返回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;
    }
};

【讨论】:

    【解决方案4】:
    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);
      }
    }
    

    【讨论】:

    • 不!将 check 设置为 false 后,您可能无法将其设置回 true。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-02-21
    • 2012-11-25
    • 2021-12-18
    • 2011-06-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多