每日一题:计数质数

news/2024/10/22 8:08:26/

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

示例 1:

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

示例 2:

输入:n = 0
输出:0

示例 3:

输入:n = 1
输出:0

提示:

  • 0 <= n <= 5 * 10^6

埃氏筛(又称埃拉托斯特尼筛法)是一种用于寻找小于等于给定整数 n 的所有质数算法

算法的工作原理如下:

  1. 创建一个布尔数组 isPrime,其中 isPrime[i] 表示数字 i 是否是质数
  2. isPrime[0]isPrime[1] 设置为 false,因为 0 和 1 不是质数
  3. 从 2 开始,遍历所有数字 i
  4. 如果 isPrime[i]true,则 i 是一个质数
  5. 将所有 i 的倍数 j 标记为非质数(即 isPrime[j] = false)。
  6. 继续步骤 3,直到遍历完所有数字。

针对本题有一些适配变化,比如不关心0和1的状态,以及求的是小于n的质数的数量,所以  n = 2时答案也是0。

class Solution {
public:int countPrimes(int n) {int count = 0;vector<int> isPrime(n,1);for(int i = 2;i < n;i++){if(isPrime[i]){count++;for(int j =  2 * i;j < n;j += i){isPrime[j] = 0;}}}return count;   }
};

这里有几个可以优化的点:

  1. 除了2以外的偶数一定不是质数
  2. 从x^2开始标记即可,因为2x,3x一定在之前就被标记过了,比如2的倍数标记2x。
class Solution {
public:int countPrimes(int n) {if(n <= 2) return 0;int count = 1;vector<int> isPrime(n,1);for(int i = 3;i < n;i += 2){if(isPrime[i]){count++;for(long long j = (long long) i * i;j < n;j += 2 * i){isPrime[j] = 0;}}}return count;   }
};

优化前后时间对比:


http://www.ppmy.cn/news/1427769.html

相关文章

【后端】Thymeleaf模板引擎学习笔记

文章目录 1. java体系模板引擎介绍2. 使用2.1 初步使用 视频地址 1. java体系模板引擎介绍 FreeMarkerThymeleafVelocity 2. 使用 2.1 初步使用 引入依赖 <dependency><groupId>org.thymeleaf</groupId><artifactId>thymeleaf</artifactId><…

type-cDP输入转双type-cDP输出,加type-c接口充电管理同时接两台显示器或者VR投屏,龙迅LT8712SX方案,龙迅桥接芯片方案

type-c的应用在各种设备上更加广泛&#xff0c;包括手机&#xff0c;电脑&#xff0c;游戏掌机&#xff0c; 因为type-c的功能非常强大&#xff0c;可以做到PD快充&#xff0c;DP信号输出&#xff0c;USB信号输出&#xff0c;所以很多设备为了做得更简洁都开始把其他的如HDMI接…

JS stacktrace 堆内存耗尽

javascript 堆内存耗尽 问题 是 npm run dev 的时候 报错 如下 <--- JS stacktrace --->FATAL ERROR: MarkCompactCollector: young object promotion failed Allocation failed - JavaScript heap out of memory在大多数情况下&#xff0c;默认情况下 Node.js 的堆内存…

XiaodiSec day032 Learn Note 小迪渗透学习笔记

XiaodiSec day032 Learn Note 小迪渗透学习笔记 记录得比较凌乱&#xff0c;不尽详细 day32 文件上传 前置 GIF98a 文件头 换行 <>[] . ;都被过滤过滤 尝试使用.user.ini 包含一个文件(可不带类似于.png 的后缀&#xff0c;因为.被过滤) 解析漏洞&#xff0c;就是 i…

2024蓝桥杯每日一题(数学期望)

备战2024年蓝桥杯 -- 每日一题 Python大学A组 试题一&#xff1a;收集卡牌 试题二&#xff1a;爬树的甲壳虫 试题三&#xff1a;绿豆蛙的归宿 试题四&#xff1a;扑克牌 试题一&#xff1a;收集卡牌 【题目描述】 小林在玩一个抽卡游戏&#xff0c;其…

启动 UE4编辑器报 加载 Plugin 失败

启动 UE4编辑器报 加载 Plugin 失败&#xff0c;报如下错误&#xff1a; Plugin ‘SteamVR’ failer to load because module ‘SteamVR’ could not be found. Please ensure the plugin is properly installed, otherwise consider disabling the plugin for this project. …

记【k8s】:访问 Prometheus UI界面:kubernetes-etcd (0/1 up) Error : out of bounds

记【k8s】:访问 Prometheus UI界面:kubernetes-etcd (0/1 up) Error : out of bounds 1、报错详情2、解决方法💖The Begin💖点点关注,收藏不迷路💖 出现 “out of bounds” 错误可能意味着Prometheus UI尝试访问的资源超出了范围。 1、报错详情 问题出在Prometheus…

x-cmd ai | x openai - 用于发送 openai API 请求,以及与 ChatGPT 对话

介绍 Openai 模块是 Openai 大模型 Chatgpt 3 和 ChatGPT 4 命令行实现。x-cmd 提供了多个不同平台间多种 AI 大模型的调用能力。无论是本地模型还是 Web 服务上的模型&#xff0c;用户都可以在不同的 AI 大模型间直接无缝切换&#xff0c;并能把之前的聊天记录发送给新的大模…