数据结构和算法前端大杂烩

每日一算法:素数

2021-04-14  本文已影响0人  lio_zero

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

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

JavaScript 实现

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

const primes = num => {
  let arr = Array.from({ length: num - 1 }).map((x, i) => i + 2) // [2, 3, 4, 5, 6, 7, 8, 9, 10]
  let sqroot = Math.floor(Math.sqrt(num)) // 3
  let numsTillSqroot = Array.from({ length: sqroot - 1 }).map((x, i) => i + 2) // [2, 3]
  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 相关的素数题目

上一篇 下一篇

猜你喜欢

热点阅读