前端算法-质数计数

简介: 前端算法-质数计数

题目

给定整数 n ,返回 所有小于非负整数 n 的质数的数量

输入: n = 10
输出: 4
解释: 小于 10 的质数一共有 4 个, 它们是 2, 3, 5, 7 。

思路一

我们这里先假设从1到n,全是质数,然后我们再依次相乘,把约数排除出去就可以了,我们这里先判断一下当前n形参是否小于或者等于2,如果是则直接返回0,接下来我们使用new Array方法创建一个长度为形参n的空数组,使用fill方法使其默认值全为1,如果我们不这样进行默认值,后来我们通过索引获取的时候,会常建新值,比较消耗性能,所以我们这里就一次性把数组建好,然后我们在声明一个num变量,他的值是n-2,然后我们进行循环,循环的停止条件为i * i < n,这是因为两个数的相乘的到 n,这两个数必然是一个数大于或者等于n,一个数小于或者等于n,或者两个数都等于n,在循环中我们设定调出条件,如果tempArr[i]和0相等,那么则说明 i 是约数,说明 i 是两个比它小的数的乘积,那么所有能被 i 整除的数们,必然也能被那两个数整除,我们这里直接跳过当前循环即可,然后再声明一个j变量,当前的j变量的值是i,然后再声明一个循环,第二个循环使用的是j变量,因为如果当前的i变量是10,那么说明当前两个数的乘积的式子,所有比10小的数都已经计算过了,那么我们就直接从当前i变量开始即可,我们第二个循环如果当前乘积结果大于n的j变量,那么我们则不需要在往下计算了,然后再让num变量进行自减1,最后我们将num变量返回出去即可

var countPrimes = function(n) {
  if (n <= 2) return 0
  let tempArr = new Array(n).fill(1)
  let num = n - 2
  for (let i = 2; i * i < n; i++) {
    if (tempArr[i] === 0) continue
    let j = i
    for (; j * i < n; j++) {
      let thsNum = i * j
      if (!tempArr[thsNum]) continue
      tempArr[thsNum] = 0
      num--
    }
  }
  return num
}


相关文章
|
1月前
|
算法 前端开发 数据可视化
数据结构与算法在前端开发中的实际应用
本文将探讨数据结构与算法在前端开发中的实际应用,重点介绍在处理大规模数据、优化性能和提升用户体验方面的具体场景和解决方案。
|
3月前
|
算法
基于光流法的车辆检测计数算法matlab仿真,对比Horn-Schunck光流和Lucas-Kanade光流
基于光流法的车辆检测计数算法matlab仿真,对比Horn-Schunck光流和Lucas-Kanade光流
|
8天前
|
算法 前端开发
前端算法 岛屿的最大面积 DFS(深度优先搜索)
前端算法 岛屿的最大面积 DFS(深度优先搜索)
11 0
|
3月前
|
算法
算法题解-计数质数
算法题解-计数质数
|
3月前
|
算法 前端开发
前端算法-路径总和
前端算法-路径总和
|
3月前
|
算法 前端开发
前端算法-平衡二叉树
前端算法-平衡二叉树
|
3月前
|
算法 前端开发
前端算法-将有序数组转换为二叉搜索树
前端算法-将有序数组转换为二叉搜索树
|
3月前
|
算法 前端开发
前端算法-对称二叉树
前端算法-对称二叉树
|
3月前
|
存储 算法 前端开发
前端算法- 二叉树的中序遍历
前端算法- 二叉树的中序遍历
|
3月前
|
存储 算法 前端开发
前端算法-合并两个有序数组
前端算法-合并两个有序数组