Leetcode 2020/12/03打卡 204计算质数(简单)
204. 计数质数
== 万一我侵犯了您的权利,联系我,我必删
统计所有小于非负整数 n 的质数的数量。
示例 1:
输入:n = 10
输出:4
解释:小于 10 的质数一共有 4 个, 它们是 2, 3, 5, 7 。
示例 2:
输入:n = 0
输出:0
示例 3:
示例 3:
输入:n = 1
输出:0
提示:
0 <= n <= 5 * 10^6
先说一件好玩的事~
请注意,看见提示了吗,所以:霹雳吧啦的一通…
class Solution {public int countPrimes(int n) {int ret = 0;for(int i=2;i<n;++i){//System.out.println(isprime(i));if(isprime(i)) ret++;} return ret;}public boolean isprime(int n){int t = (int)Math.sqrt(n);for(int i=2;i<t+1;++i){if(n % i == 0)return false;}return true;}
}
没有超时。。。。。
异常骚气的操作,于是我多提交了几遍,
果然,,,
改成下面这样一样的超时:
public boolean isprime(int n){ for(int i=2;i*i<n+1;++i){if(n % i == 0)return false;}return true;}
还是上正解吧:
方法一:埃氏筛
我们设isPrime[i] 表示数 i是不是质数,如果是质数则为 0,否则为 0。从小到大遍历每个数,如果这个数为质数,则将其所有的倍数都标记为合数(除了该质数本身),即 0,这样在运行结束的时候我们即能知道质数的个数。
class Solution {public int countPrimes(int n) {int[] isPrime = new int[n]; int ans = 0;for (int i = 2; i < n; ++i) {if (isPrime[i] == 0) {ans += 1;if ((long) i * i < n) { //这里需要注意,因为 5 * 10^6的平方超过了int的表示范围,为啥n不用加,加了也无妨,数字类型会自动向大的看齐for (int j = i * i; j < n; j += i) {//这里直接过滤每一个数字的倍数,坑定不是素数,设为1排除掉//为啥是i*i呢,因为相信我 i*k(k<i)的时候,不就相当于k*i吗==这在前面已经过滤一次了,但是呢 i*k(k>i)的时候,也有重复,所以有了下面一种方法isPrime[j] = 1;}}}}return ans;}
}
方法三:线性筛
这里借鉴官方的话术:https://leetcode-cn.com/problems/count-primes/solution/ji-shu-zhi-shu-by-leetcode-solution/
线性筛法并不是判定素数的,而是在线性时间内求出一个素数表,需要判定是否是素数的时候只要看该数是否在表内就可以瞬间知道是不是素数。
个合数必有一个最xiao因子(不包括它本身) ,用这个因子把合数筛掉
class Solution {public int countPrimes(int n) {List<Integer> primes = new ArrayList<Integer>();int[] isPrime = new int[n]; for (int i = 2; i < n; ++i) {if (isPrime[i] == 0) {primes.add(i);}for (int j = 0; j < primes.size() && i * primes.get(j) < n; ++j) {isPrime[i * primes.get(j)] = 1; //按照一个数的最小素因子筛选if (i % primes.get(j) == 0) {如果遇到i为合数,我们只认为合数由一个最小的素数*合数得到,也不会重复(就像12=2*6而不是12=3*4)break;}}}return primes.size();}
}
想要好好研究的推荐:
https://blog.csdn.net/bjrxyz/article/details/8125913?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-1.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-1.control
Leetcode 2020/12/03打卡 204计算质数(简单)相关推荐
- TensorFlow GAN项目程序回顾2020.12.03
1.前言 GAN项目被我搁置一旁很久了,最近想回顾一下写过的程序,看看能不能发现一些错误或是从中得到一些新的灵感和启发. 2.程序回顾 废话不多说,直接上代码,我只挑一些比较重要的进行分析. Tens ...
- 【2020.12.03提高组模拟】袋鼠
题目 题目描述 你知道吗?乌拉圭的人口有345.7万,同时,仅澳大利亚就有4700万只袋鼠. 袋鼠决定入侵乌拉圭.袋鼠们将在平原上布阵,平原被划分成 n×mn \times mn×m 的网格. 每个格 ...
- 2020.12.03丨全长转录组之基因和转录本鉴定
折叠转录本 分析目的:基于基因组比对结果,将相似的多转录本折叠成单个转录本(去冗余) PacBio分析软件: TAMA:https://github.com/GenomeRIK/tama TAMA简介 ...
- 转 TensorFlow Object Detection API 多GPU 卡平行计算,加速模型训练速度教学
本篇记录如何使用多张GPU 显示卡,加速TensorFlow Object Detection API 模型训练的过程. 虽然TensorFlow Object Detection API 已经有支援 ...
- TensorFlow Object Detection API 多GPU 卡平行计算,加速模型训练速度教学
本篇记录如何使用多张GPU 显示卡,加速TensorFlow Object Detection API 模型训练的过程. 虽然TensorFlow Object Detection API 已经有支援 ...
- C语言3067答案,教师招聘《小学教育心理学》通关试题每日练(2020年03月03日-3067)...
1:将学习策略分为基本策略和支持策略的是( ). 单项选择题 A.丹瑟洛 B.尼斯比特 C.皮连生 D.鲍斯菲尔德 2:奠定儿童人格和心理健康基础的是( ). 单项选择题 A.社会 B.家庭 C.学校 ...
- 第9节 蒙卡模拟计算美式期权价格(b)
第9节 蒙卡模拟计算美式期权价格(b) 9.1 简介 9.2 参数化执行边界算法 9.3 算法Python代码实现 9.4 计算示例 9.5 参考资料 9.1 简介 使用蒙卡模拟计算美式期权价格除了最 ...
- 第7节 蒙卡模拟计算路径依赖型期权价格
第7节 蒙卡模拟计算路径依赖型期权价格 7.1 简介 7.2 蒙卡模拟计算回望/亚式期权算法 7.3 算法 Python 代码实现 7.4 计算示例 7.5 相关说明 7.5.1 由均匀分布产生正态分 ...
- 第8节 蒙卡模拟计算美式期权价格(a)
第8节 蒙卡模拟计算美式期权价格(a) 8.1 简介 8.2 最小二乘法计算美式期权价格 8.3 算法Python代码实现 8.4 计算示例 8.5 相关说明 8.5.1 美式看涨期权不会被提前行使 ...
最新文章
- Spring源码分析【5】-Spring MVC处理流程
- RandLA-Net测试
- 【linux家常菜】redhat 6.5 安装yum
- 垃圾回收器的基本原理是什么?
- 仿某某网站模板thinkphp_西安网站建设到底是什么?
- php时间格式函数,PHP函数之日期时间函数date()使用详解_php基础_脚本
- mysql 数据恢复 报错_Mysql 数据恢复报错
- c语言传入的指针无返回值,c语言 关于指针注意事项
- 【转】Oracle 系统权限详细列表
- 中gcd函数_算法|博弈论入门(函数讲解+真题模板)
- 敏捷开发“松结对编程”实践之一:人员结构篇(大型研发团队,学习型团队,139团队,师徒制度)...
- 923模拟电子技术基础和数字电子技术基础考试大纲
- 一文读懂YUV的采样与格式
- 显示器尺寸对照表_常见像素和显示屏大小对照表
- 计算机硬件开票几个点,财务税控开票电脑装机配置清单和价格介绍
- 怎样用计算机计算矩阵,【活用工具】教你如何用卡西欧fx82es计算机计算复数 矩阵等...
- 济南“90后”打金女孩:打造有温度的金属
- 比较两条曲线的相似程度
- 简述java什么是继承_Java 继承简述
- 德州仪器(TI)希望小学在江西萍乡市湘东区腊市镇正式落成并启用