【问题标题】:Finding prime number in a range in javascript在javascript中查找范围内的素数
【发布时间】:2021-06-30 09:50:27
【问题描述】:

我正在尝试解决这个问题,即循环遍历 1 到 60 之间的数字以找到总质数。这是我想出的:

var totalPrimeNumber = 0;
for(let i=1; i<=60; i++) {
    for(let j= 2; j< i; j++) {
        if(i%j ==0) {
            console.log(i, "is not a prime number");
        }
        console.log(i, "is a prime number");
        totalPrimeNumber+=1;
    }
}

但是输出错误:

3 is a prime number
4 is not a prime number
4 is a prime number
4 is a prime number
5 is a prime number
5 is a prime number
5 is a prime number
6 is not a prime number
6 is a prime number
6 is not a prime number
6 is a prime number
6 is a prime number
6 is a prime number
7 is a prime number
7 is a prime number
7 is a prime number

你知道我该如何解决这个问题吗?

【问题讨论】:

  • 一旦你确定一个数不是素数,你需要break; 退出循环。对于检查素数,let j=2; j&lt;=Math.sqrt(i); j++ 就足够了。
  • 更好的方法是编写一个函数isPrime(number),它返回一个布尔值,并在循环中为i 的每个值调用它。把你的问题分解成更小的问题,一次一个地处理。像这样的东西:jsfiddle.net/nha613vg
  • 这能回答你的问题吗? Number prime test in JavaScript

标签: javascript loops primes


【解决方案1】:

一旦知道数字不是质数,就应该打破内循环

您还可以通过仅检查直到平方根的数字作为分隔符来改进您的代码。例如。如果您检查 100 是否是素数,那么您只需要检查最多 10 的数字,因为较大的数字将具有较低的乘数(例如,您不需要检查 50,因为您已经检查了 2 和 2*50 = 100)

var totalPrimeNumber = 0;
for (let i = 1; i <= 60; i++) {
  let prime = i > 1;
  for (let j = 2; j <= Math.sqrt(i); j++) {
    if (i % j == 0) {
      prime = false;
      break;
    }
  }
  if (prime) {
    console.log(i, "is a prime number");
    totalPrimeNumber += 1;
  } else {
    console.log(i, "is not a prime number");
  }
}

【讨论】:

  • 请注意,SO 控制台会漏掉 11 以下的所有内容,但它们都在那里!
【解决方案2】:

您也可以尝试使用 Array.filter 来仅选择 Array 中的素数,例如:

function isPrime(n) {
    if (n < 2) {
        return false;
    }
    for(let i = 2; i < n; i++) {
        if(n % i === 0) return false;
    }
    return true;
}

const count = 60;
const numbers = Array.from({ length: count}, (v,k) => k + 1);
const primes = numbers.filter(n => isPrime(n))
console.log("Primes:", primes)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-08
    • 2020-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多