【问题标题】:Javascript Function Issues for Prime Numbers素数的 Javascript 函数问题
【发布时间】:2019-02-28 19:31:09
【问题描述】:

所以我想做的是使用一个函数来提示输入一个数字,然后打印所有素数直到那个数字。据我所知,我有代码,但我不断收到错误消息,即 prime(num) 后面的括号是错误的。不知道我在这里做错了什么,将不胜感激。

function p5Bela() {
 var num = prompt("Please enter a number: ", "");
 for (i = 2; i <= num; i++) {
  if (prime(i)==true) {
  alert(i);
 }
}
prime(num) {
var flag = true;
var d = 2;
while (flag==true && d <= num/2) {
if (num%d == 0) {
  flag = false;
  }
    d++;
  }
  return flag;
 } 
}

【问题讨论】:

  • 你的意思是function prime(num){?另外——你的算法效率极低。正确的sieve 实现起来并不难,如果你坚持测试每个数字,你的主要测试算法做的工作太多了。
  • prime(num) 无效,改为function prime(num)
  • 您在prime(num) 之前错过了function 关键字。作为另一个提示,你可以return false; 而不是flag = false;,只要你找到一个你知道这个数字不是素数的因子,但你的函数将继续循环遍历直到num 的所有数字。这仍然不是一个有效的算法,但这样做会大大改善它。
  • 在 prime() 函数中,您正在检查 num/2。但是您只需要检查到Math.sqrt(num2). 以查看 num 是否为素数。也就是说,对于 101,您只需要检查最多 10 的除数。

标签: javascript function button primes


【解决方案1】:

最简单的方法

function isPrime(num) {
      for(var i = 2; i < num; i++)
        if(num % i === 0) return false;
      return num > 1;
    }

使用 ES6 语法:

const isPrime = num => {
  for(let i = 2; i < num; i++)
    if(num % i === 0) return false;
  return num > 1;
}

如果您运行循环直到数字的平方根,您还可以将算法的复杂度从 O(n) 降低到 O(sqrt(n)):

const isPrime = num => {
    for(let i = 2, s = Math.sqrt(num); i <= s; i++)
        if(num % i === 0) return false; 
    return num > 1;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-22
    • 2021-01-03
    • 2020-05-17
    • 2018-12-06
    • 2020-06-17
    • 1970-01-01
    相关资源
    最近更新 更多