每日一题:计数质数

ops/2024/10/22 8:30:27/

给定整数 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/ops/6040.html

相关文章

专题【二分查找】刷题日记

题目列表 4. 寻找两个正序数组的中位数 33. 搜索旋转排序数组 34. 在排序数组中查找元素的第一个和最后一个位置 35. 搜索插入位置 69. x 的平方根 167. 两数之和 II - 输入有序数组 209. 长度最小的子数组 222. 完全二叉树的节点个数 287. 寻找重复数 2023.04.14 4. 寻找两…

机器学习周记(第三十五周:语义分割)2024.4.15~2024.4.21

目录 摘要 ABSTRACT 1 语义分割基本概念 1.1 数据集格式 ​编辑 1.2 语义分割评价指标 1.3 语义分割标注工具 2 转置卷积 3 FCN网络结构基本原理 摘要 本周主要学习了语义分割的基本概念及其在计算机视觉领域中的应用。了解了语义分割的几种经典网络&#xff0c;如全卷…

《王者荣耀》Hello Kitty 小兵皮肤完整设置指南

王者荣耀与三丽鸥的联动活动上线了 Hello Kitty 小兵皮肤&#xff0c;让我们的峡谷小兵们也能穿上漂亮的衣服啦&#xff01;这款皮肤极具卡哇伊风格&#xff0c;引起了许多玩家的关注。许多小伙伴都想知道如何使用这款 Hello Kitty 小兵皮肤&#xff0c;今天小编将为大家整理出…

OpenHarmony 网络管理-Socket连接

介绍 本示例主要演示了Socket在网络通信方面的应用&#xff0c;展示了Socket在两端设备的连接验证、聊天通信方面的应用。 效果预览 使用说明 1.搭建服务器环境&#xff1a;修改服务器脚本中的服务端IP地址&#xff0c;与本机IP地址保持一致&#xff0c;修改完成后双击运行脚…

[阅读笔记23][JAM]JOINTLY TRAINING LARGE AUTOREGRESSIVE MULTIMODAL MODELS

这篇论文是24年1月发表的&#xff0c;然后是基于的RA-CM3和CM3Leon这两篇论文。它所提出的JAM结构系统地融合了现有的文本模型和图像生成模型。 主要有两点贡献&#xff0c;第一点是提出了融合两个模型的方法&#xff0c;第二点是为混合模型精心设计的指令微调策略。 下图是一个…

使用Flask和Flask-JWT-Extended保护API免受跨站请求攻击

在本文中&#xff0c;我们将探讨如何使用Flask和Flask-JWT-Extended库来保护您的API免受跨站请求攻击&#xff08;CSRF&#xff09;。我们将首先简要介绍CSRF攻击的概念&#xff0c;然后详细说明如何使用Flask-JWT-Extended库来保护您的API。 什么是跨站请求攻击&#xff08;C…

大数据学习的第三天

文章目录 学习大数据命令的方式查看文件拷贝文件的方式添加数据的方式 出现了问题移动文件 hadoop工作流程和工作机制的方式namenodedatanodesecondarynamenode(主节点) 学习大数据命令的方式 查看文件 hadoop fs -cat /test/2.txt下载文件 hadoop fs -get -f /test/2.txt-f …

Mysql 和 PostgreSQL 到底选啥?

当我深入探讨MySQL和PostgreSQL这两个著名的开源数据库时&#xff0c;我们不仅发现它们在功能、性能和用例方面存在明显的差异&#xff0c;同时也能看出它们各自在特定场景下的独特优势。选择哪一个往往取决于项目的具体需求、团队的熟悉度以及未来的扩展计划。 在这篇文章中&…