目录

  • 1.题目
  • 2.思路
  • 3.代码实现(Java)

1.题目

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

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

示例 2:
输入:n = 0
输出:0

示例 3:

输入:n = 1
输出:0

提示:
0 <= n <= 5 * 106

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/count-primes

2.思路

(1)判断素数法
该思路比较容易想到,即用变量 cnt 记录质数的个数,遍历每一个小于 n 的非负整数,然后依次对其进行判断,如果是质数,则 cnt++,遍历结束后直接返回 cnt 即可。但这样的效率较低,并且在LeetCode中提交运行时会出现运行时间超时的问题!

(2)埃拉托斯特尼筛法(Sieve of Eratosthenes)
其主要思想是把小于根号 n 的所有素数的倍数剔除掉(或者做特殊标记),那么剩下(或为做标记)的数就都是素数

(3)欧拉筛法
其主要思想是在埃拉托斯特尼筛法的基础上,让每个合数只被它的最小质因子筛选一次,从而达到不重复筛选的目的

3.代码实现(Java)

//思路1————判断素数法
public int countPrimes(int n) {int cnt = 0;for (int i = 0; i < n; i++) {//判断 i 是否为质数/素数if (isPrime(i)) {cnt++;}}return cnt;
}//判断非负整数 n 是否为素数/质数,若为素数/质数返回true,否则返回false
public boolean isPrime(int n) {if (n == 0 || n == 1) {return false;}if (n == 2) {return true;}for (int i = 2; i <= Math.sqrt(n); i++) {if (n % i == 0) {return false;}}return true;
}
//思路2————埃拉托斯特尼筛法
public int countPrimes(int n) {int cnt = 0;//primes[i] == true:表示非负整数 i 是质量/素数boolean[] primes = new boolean[n];//将primes初始化,假设全部是素数Arrays.fill(primes, true);//使用埃拉托斯特尼筛法将非素数标记为falsefor (int i = 2; i * i < n; i++) {if (primes[i] == true) {//将小于根号 n 的所有素数的倍数标记为 falsefor (int j = i * i; j < n; j += i) {primes[j] = false;}}}for (int i = 2; i < n; i++) {if (primes[i] == true) {cnt++;}}return cnt;
}
//思路3————欧拉筛法
public static int countPrimes(int n) {int cnt = 0;int[] primes = new int[n];byte[] check = new byte[n];for (int i = 2; i < n; i++) {if (check[i] == 0) {//当前非负整数 i 是素数,将其保存到 primes 中primes[cnt++] = i;}for (int j = 0; j < cnt && i * primes[j] < n; j++) {//将数组 prime 里面纪录的素数,升序来当作要标记非素数的最小因子check[i * primes[j]] = 1;if (i % primes[j] == 0) {break;}}}return cnt;
}

LeetCode_素数筛_中等_204.计数质数相关推荐

  1. 埃式筛/厄拉多塞筛法/Sieve_of_Eratosthenes/计数质数

    今天的每日一题是计数质数. 要求统计所有小于非负整数 n 的质数的数量. 为了解这题,学到了一个古老的魔法,快速寻找质数. 搜了下百度,keywords = "prime" &qu ...

  2. python 素数库_使用Python判断质数(素数)的简单方法讲解

    质数又称素数.指在一个大于1的自然数中,除了1和此整数自身外,不能被其他自然数整除的数.素数在数论中有着很重要的地位.比1大但不是素数的数称为合数.1和0既非素数也非合数.质数是与合数相对立的两个概念 ...

  3. 筛表合集(素数筛 欧拉函数筛 莫比乌斯函数筛)

    [目录] 一.素数筛 1.素数判断 2.素数普通筛 3.素数线性筛 4.素数区间筛 二.欧拉函数筛 三.莫比乌斯函数筛 [素数筛] 1.直接判定质数 bool judgePrime( int num ...

  4. 筛法快速求素数——leetcode计数质数

    在算法竞赛中经常会遇到求质数的问题,这种题目一般都是要求出一定范围内[0,n]所有的质数或者质数的个数.最直接的思路就是根据质数的定义来判定一个数是不是质数(即一个数不能被除1和它本身外的任何数整除) ...

  5. 【LeetCode】计数质数 [M](素数筛选)

    204. 计数质数 - 力扣(LeetCode) 一.题目 给定整数 n ,返回 所有小于非负整数 n 的质数的数量 . 示例 1: 输入:n = 10 输出:4 解释:小于 10 的质数一共有 4 ...

  6. 2007 - 半质数 --- 素数筛+2137 - 质因子2

    ** 2007 - 半质数 --- 素数筛 **来源:东方博宜oj oj.czos.cn*解法一:(线性筛) #include<bits/stdc++.h> using namespace ...

  7. 三种素数筛总结——(朴素筛,埃氏筛,线性筛)

    但行好事,莫问前程. 题目背景 题目:(leetcode)204.计数质数 给定整数 n ,返回 所有小于非负整数 n 的质数的数量 . 对于这类求解素数个数有关的题目,通常采用质数筛算法. 本文不计 ...

  8. 算法---计数质数(Java)

    题目:计数质数 给定整数 n ,返回 所有小于非负整数 n 的质数的数量 . 示例 1: 输入:n = 10 输出:4 解释:小于 10 的质数一共有 4 个, 它们是 2, 3, 5, 7 . 示例 ...

  9. HDOJ 6069 素数筛

    链接: http://acm.hdu.edu.cn/showproblem.php?pid=6069 题意: 就是题目中的公式 题解: 这个题公式很好推 d(nk) = (kc1 + 1)(kc2 + ...

最新文章

  1. python代码格式-设置Python代码格式
  2. 部分免费的3D模型网站
  3. datagrid如何获取一行数据中的某个字段值_使用Mysql 数据库 新手常见问题
  4. 如何动态的生成某种类型的集合呢_知乎画报」的移动端动态化工程实践
  5. 让我们了解Set及其在JavaScript中的独特功能
  6. 【牛客 - 82B】区间的连续段(贪心,建图,倍增)
  7. 二、Vue基础语法学习笔记——事件监听v-on、条件判断(v-if、v-else-if、v-else、v-show)、循环遍历(v-for遍历数组对象,key属性、检测数组更新)、图书案例、双向绑定
  8. 【去重】php正则过滤字符串中多次重复出现内容为1个
  9. 拓端tecdat|Python中的ARIMA模型、SARIMA模型和SARIMAX模型对时间序列预测
  10. django的orm获取字段去重值
  11. 分布式开源调度框架TBSchedule详解
  12. python爬虫-破解验证码(封装超级鹰实现)
  13. 给一个年份输出该年是否举办足球世界杯的信息,以及给一个国家的名称输出是否夺得过世界杯冠军
  14. 早晨随笔_早上如何调试
  15. 华三交换机irf堆叠以及BFD检测配置
  16. 第七篇、网络资源获取。
  17. Python如何爬取不确定页数的网页
  18. 【笔记】cocos2dx xxtea逆向获取lua脚本和资源文件
  19. 剖析Unreal Engine超真实人类的渲染技术Part 2 - 眼球渲染
  20. 新年寄语 —— 奋斗2022

热门文章

  1. 5大优秀黑客必逛技术网站
  2. 项目管理的流程是什么?
  3. Minitab统计分析学习(一) - 数据管理功能
  4. 《数据挖掘原理与实战》教程网盘下载
  5. MySQL学习笔记-第一篇-基础知识与命令
  6. 基于交替迭代法的交直流混合系统潮流计算matlab程序iEEE9节点系统算例
  7. web字体库加载优化_优化Web字体以提高性能:最新技术
  8. Win10下永久性关闭自动更新(可恢复更新)最简单有效的方法《亲测有效》
  9. jsp分页技术用oracle实现,Oracle Rownum的使用与JSP分页显示的实现
  10. 湘潭大学通信原理期末简答题