枚举——统计所有小于非负整数 n 的质数的数量

2024-01-03 15:38

本文主要是介绍枚举——统计所有小于非负整数 n 的质数的数量,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、问题

统计所有小于非负整数 n 的质数的数量。

示例:
在这里插入图片描述
提示: 0 <= n <= 5 * 106

二、解题思路

很直观的思路是枚举每个数判断其是不是质数。

考虑质数的定义:在大于 1 1 1 的自然数中,除了 1 1 1 和它本身以外不再有其他因数的自然数。

因此对于每个数 x x x ,我们可以从小到大枚举 [ 2 , x − 1 ] [2, x-1] [2,x1] 中的每个数 y y y,判断是否为 x x x 的因数。但是这样判断一个数是否为质数的时间复杂度最差情况下会到 O ( n ) O(n) O(n) ,时间复杂度高。

考虑到如果 y y y x x x 的因数,那么 x y \frac{x}{y} yx 也必然是 x x x 的因数,因此我们只要校验 y y y 或者 x y \frac{x}{y} yx 即可。而如果我们每次选择校验两者中的较小数,则不难发现较小数一定落在 [ 2 , x ] [2, \sqrt{x}] [2,x ] 的区间中,因此我们只需要枚举 [ 2 , x ] [2, \sqrt{x}] [2,x ] 中的所有数即可,这样单次检查的时间复杂度从 O ( n ) O(n) O(n) 降低至了 O ( n ) O(\sqrt{n}) O(n )

三、代码

bool isPrime(int x) {for (int i = 2; i * i <= x; ++i) {if (x % i == 0) {return false;}}return true;
}int countPrimes(int n) {int ans = 0;for (int i = 2; i < n; ++i) {ans += isPrime(i);}return ans;
}

四、复杂度分析

  • 时间复杂度: O ( n n ) O(n\sqrt{n}) O(nn )
  • 空间复杂度: O ( 1 ) O(1) O(1)

五、参考

作者:LeetCode-Solution
链接:https://leetcode-cn.com/problems/count-primes/solution/ji-shu-zhi-shu-by-leetcode-solution/
来源:力扣(LeetCode)

这篇关于枚举——统计所有小于非负整数 n 的质数的数量的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/566194

相关文章

通过高德api查询所有店铺地址信息

通过高德api查询所有店铺地址电话信息 需求:通过高德api查询所有店铺地址信息需求分析具体实现1、申请高德appkey2、下载types city 字典值3、具体代码调用 需求:通过高德api查询所有店铺地址信息 需求分析 查询现有高德api发现现有接口关键字搜索API服务地址: https://developer.amap.com/api/webservice/gui

SQL Server中,查询数据库中有多少个表,以及数据库其余类型数据统计查询

sqlserver查询数据库中有多少个表 sql server 数表:select count(1) from sysobjects where xtype='U'数视图:select count(1) from sysobjects where xtype='V'数存储过程select count(1) from sysobjects where xtype='P' SE

力扣SQL50 每位经理的下属员工数量 join

Problem: 1731. 每位经理的下属员工数量 👨‍🏫 参考题解 Code select m.Employee_id, m.name,count(*) reports_count,round(avg(e.age),0) average_agefrom Employees ejoin Employees mon e.reports_to = m.Employee_id

vue3项目将所有访问后端springboot的接口统一管理带跨域

vue3项目将所有访问后端springboot的接口统一管理带跨域 一、前言1.安装Axios2.创建Axios实例3.创建API服务文件4.在组件中使用API服务 二、跨域三、总结 一、前言 在Vue 3项目中,统一管理所有访问后端Spring Boot接口的最佳实践是创建一个专门的API服务层。这可以让你的代码更加模块化、可维护和集中管理。你可以使用Axios库作为HTT

LeetCode--204 计数质数

题目 统计所有小于非负整数 n 的质数的数量。 示例 示例:输入: 10输出: 4解释: 小于 10 的质数一共有 4 个, 它们是 2, 3, 5, 7 。 class Solution {public:int countPrimes(int n) {if (n <= 2) return 0;int cnt = 0;vector<bool> isPrime(n, true);

WDF驱动开发-WDF总线枚举(一)

支持在总线驱动程序中进行 PnP 和电源管理 某些设备永久插入系统,而其他设备可以在系统运行时插入和拔出电源。 总线驱动 必须识别并报告连接到其总线的设备,并且他们必须发现并报告系统中设备的到达和离开情况。 总线驱动程序标识和报告的设备称为总线的 子设备。 标识和报告子设备的过程称为 总线枚举。 在总线枚举期间,总线驱动程序会为其子 设备创建设备对象 。  总线驱动程序本质上是同时处理总线枚

Linux中拷贝 cp命令中拷贝所有的写法详解

This text from: http://www.jb51.net/article/101641.htm 一、预备  cp就是拷贝,最简单的使用方式就是: cp oldfile newfile 但这样只能拷贝文件,不能拷贝目录,所以通常用: cp -r old/ new/ 那就会把old目录整个拷贝到new目录下。注意,不是把old目录里面的文件拷贝到new目录,

图形编辑器基于Paper.js教程03:认识Paper.js中的所有类

先来认一下Paper的资源对象,小弟有哪些,有个整体的认识。认个脸。 在Paper.js的 官方文档中类大致有如下这些: 基类: ProjectViewItemPointToolSizeSegmentRectangleCurveCurveLocationMatrixColorStyleTweenToolEventGradientGradientStopEvent 二级或三级类 继承Ite

统计是一门艺术(点估计)

1 点估计 1.1 点估计理解(point estimate) 总体,样本属于参数空间 一般未知,要由样本对作一个估计,或对作一个估计,这种估计称为点估计 通常用记为的一个点估计。 1.2 点估计的方法 (1)矩估计: 就是用样本矩来代替总体矩,当然有好有坏 设为总体的一个简单随机样本,, 分别称, 为k阶样本原点矩和k阶样本中心矩. 记 为什么能用矩估计?

代码随想录算法训练营第三十九天|62.不同路径 63. 不同路径 II 343.整数拆分 96.不同的二叉搜索树

LeetCode 62.不同路径 题目链接:62.不同路径 踩坑:二维的vector数组需要初始化,否则会报错访问空指针 思路: 确定动态数组的含义:dp[i][j]:到达(i,j)有多少条路经递推公式:dp[i][j] = dp[i-1][j] + dp[i][j-1]初始化动态数组:dp[0][0] = 1遍历顺序:从左到右,从上到下 代码: class Solution {pu