簡體   English   中英

試圖在數組中找到質數

[英]trying to find Prime numbers in an array

我想從數組中刪除非素數,以下只是刪除偶數而不是素數。

function sumPrimes(num) {
  //Produce an array containing all number of to and including num
  let numArray = [];
  for (let i = 1; i <= num; i++) {
    numArray.push(i);
  }

  //Remove non-prime numbers from the array     
  numArray.map((number) => {
    for (let i = 2; i < number; i++) {
        if(number % i === 0) {
            let index = numArray.indexOf(number);
            return numArray.splice(index, 1);       
        }
    }   
  });

 return numArray;

}

sumPrimes(10);

目前正在返回:

[1, 2, 3, 5, 7, 9]

但是,素數是1、2、3、5、7(不包括9);

使用filter()代替:

 var numArray = [2, 3, 4, 5, 6, 7, 8, 9, 10] numArray = numArray.filter((number) => { for (var i = 2; i <= Math.sqrt(number); i++) { if (number % i === 0) return false; } return true; }); console.log(numArray);

上一個答案對負數不起作用。

正如您在此處看到的,查找素數的最簡單方法是:

 const array = [-5, -3, -2, -1, ...Array(20).keys()]; // Array(20).keys() generates numbers from 0 to 19. function isPrime(num) { for (let start = 2; num > start; start++) { if (num % start == 0) { return false; } } return num > 1; } console.log(array.filter(isPrime)); // [2, 3, 5, 7, 11, 13, 17, 19]

Farnaz Kakhsaz 的答案效果很好,但速度很慢。 你只需要檢查直到'num'的根。 謝謝!

const array = [-5, -3, -2, -1, ...Array(20000).keys()]; 

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

console.log(array.filter(isPrime));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM