Skip to content

Latest commit

 

History

History
33 lines (23 loc) · 1.7 KB

每日一算法:素数.md

File metadata and controls

33 lines (23 loc) · 1.7 KB

每日一算法:素数

质数(Prime number),又称素数,指在大于 1 的自然数中,除了 1 和该数自身外,无法被其他自然数整除的数(也可定义为只有 1 与该数本身两个正因数的数)。

埃拉托斯特尼筛法,简称埃氏筛,也称素数筛。是一种由希腊数学家埃拉托斯特尼所提出的一种简单检定素数的算法。要得到自然数 n 以内的全部素数,必须把不大于根号 n 的所有素数的倍数剔除,剩下的就是素数。

JavaScript 实现

使用埃拉托斯特尼筛法(Eratosthenes)产生最多给定数的质数。

  • 2 到给定数字生成一个数组。
  • 使用 Array.prototype.filter() 筛选出可被从 2 到所提供数字的平方根的任何数字整除的值。
const primes = (num) => {
  let arr = Array.from({ length: num - 1 }).map((x, i) => i + 2)
  let sqroot = Math.floor(Math.sqrt(num))
  let numsTillSqroot = Array.from({ length: sqroot - 1 }).map((x, i) => i + 2)
  numsTillSqroot.forEach(
    (x) => (arr = arr.filter((y) => y % x !== 0 || y === x))
  )
  return arr
}

primes(10) // [2, 3, 5, 7]

此示例来自 30 seconds of code 的 primes

LeetCode 相关的素数题目