每日一算法:素数

质数(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) // [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 相关的素数题目

全部评论

相关推荐

07-14 13:47
门头沟学院 Java
Lynn012:你评估好自己的位置了吗《顶尖应届》
投递小米集团等公司7个岗位
点赞 评论 收藏
分享
06-08 22:25
门头沟学院 Java
从零开始的转码生活:这hr不会打开手机不分青红皂白给所有人群发这句话,过一会再给所有人再发一遍,这肯定会有重复的,不管,再过一会再发一遍
点赞 评论 收藏
分享
下北澤大天使:你是我见过最美的牛客女孩😍
点赞 评论 收藏
分享
07-11 15:12
门头沟学院 Java
别人在上班,我就在工位上看看视频啥的,这正常吗?
程序员小白条:实习就是摸鱼,只是公司指标,把你进来了,可能那时候客户很多,但等你进来的时候,已经是淡季了,根本没多少需求,或者说根本不适合实习生去完成,因此你就每天干坐着就行,可能1,2个月都没需求
实习生的蛐蛐区
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务