LeetCode_素数筛_中等_204.计数质数
目录
- 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.计数质数相关推荐
- 埃式筛/厄拉多塞筛法/Sieve_of_Eratosthenes/计数质数
今天的每日一题是计数质数. 要求统计所有小于非负整数 n 的质数的数量. 为了解这题,学到了一个古老的魔法,快速寻找质数. 搜了下百度,keywords = "prime" &qu ...
- python 素数库_使用Python判断质数(素数)的简单方法讲解
质数又称素数.指在一个大于1的自然数中,除了1和此整数自身外,不能被其他自然数整除的数.素数在数论中有着很重要的地位.比1大但不是素数的数称为合数.1和0既非素数也非合数.质数是与合数相对立的两个概念 ...
- 筛表合集(素数筛 欧拉函数筛 莫比乌斯函数筛)
[目录] 一.素数筛 1.素数判断 2.素数普通筛 3.素数线性筛 4.素数区间筛 二.欧拉函数筛 三.莫比乌斯函数筛 [素数筛] 1.直接判定质数 bool judgePrime( int num ...
- 筛法快速求素数——leetcode计数质数
在算法竞赛中经常会遇到求质数的问题,这种题目一般都是要求出一定范围内[0,n]所有的质数或者质数的个数.最直接的思路就是根据质数的定义来判定一个数是不是质数(即一个数不能被除1和它本身外的任何数整除) ...
- 【LeetCode】计数质数 [M](素数筛选)
204. 计数质数 - 力扣(LeetCode) 一.题目 给定整数 n ,返回 所有小于非负整数 n 的质数的数量 . 示例 1: 输入:n = 10 输出:4 解释:小于 10 的质数一共有 4 ...
- 2007 - 半质数 --- 素数筛+2137 - 质因子2
** 2007 - 半质数 --- 素数筛 **来源:东方博宜oj oj.czos.cn*解法一:(线性筛) #include<bits/stdc++.h> using namespace ...
- 三种素数筛总结——(朴素筛,埃氏筛,线性筛)
但行好事,莫问前程. 题目背景 题目:(leetcode)204.计数质数 给定整数 n ,返回 所有小于非负整数 n 的质数的数量 . 对于这类求解素数个数有关的题目,通常采用质数筛算法. 本文不计 ...
- 算法---计数质数(Java)
题目:计数质数 给定整数 n ,返回 所有小于非负整数 n 的质数的数量 . 示例 1: 输入:n = 10 输出:4 解释:小于 10 的质数一共有 4 个, 它们是 2, 3, 5, 7 . 示例 ...
- HDOJ 6069 素数筛
链接: http://acm.hdu.edu.cn/showproblem.php?pid=6069 题意: 就是题目中的公式 题解: 这个题公式很好推 d(nk) = (kc1 + 1)(kc2 + ...
最新文章
- python代码格式-设置Python代码格式
- 部分免费的3D模型网站
- datagrid如何获取一行数据中的某个字段值_使用Mysql 数据库 新手常见问题
- 如何动态的生成某种类型的集合呢_知乎画报」的移动端动态化工程实践
- 让我们了解Set及其在JavaScript中的独特功能
- 【牛客 - 82B】区间的连续段(贪心,建图,倍增)
- 二、Vue基础语法学习笔记——事件监听v-on、条件判断(v-if、v-else-if、v-else、v-show)、循环遍历(v-for遍历数组对象,key属性、检测数组更新)、图书案例、双向绑定
- 【去重】php正则过滤字符串中多次重复出现内容为1个
- 拓端tecdat|Python中的ARIMA模型、SARIMA模型和SARIMAX模型对时间序列预测
- django的orm获取字段去重值
- 分布式开源调度框架TBSchedule详解
- python爬虫-破解验证码(封装超级鹰实现)
- 给一个年份输出该年是否举办足球世界杯的信息,以及给一个国家的名称输出是否夺得过世界杯冠军
- 早晨随笔_早上如何调试
- 华三交换机irf堆叠以及BFD检测配置
- 第七篇、网络资源获取。
- Python如何爬取不确定页数的网页
- 【笔记】cocos2dx xxtea逆向获取lua脚本和资源文件
- 剖析Unreal Engine超真实人类的渲染技术Part 2 - 眼球渲染
- 新年寄语 —— 奋斗2022