【算法基础】筛质数

文章目录

  • 问题描述
  • 解决方法
    • 朴素筛法
    • 线性筛法

在这里插入图片描述


问题描述

给定一个正整数 n n n,请你求出 1 ∼ n 1∼n 1n 中质数的个数。

输入格式
共一行,包含整数 n。

输出格式
共一行,包含一个整数,表示 1∼n 中质数的个数。

数据范围
1 ≤ n ≤ 1 0 6 1≤n≤10^6 1n106


解决方法

朴素筛法

从前往后遍历,把每个数的倍数都删掉,剩下的数就是质数
证明方法在前面的一个打卡里面写了,复杂度是O(nlogn)
这里优化一下,只需要把所有质数的倍数删掉即可,证明也是在上一篇文章里面讲了
这里是时间复杂度为O(nloglogn),这里把它叫做埃氏筛法

代码实现

#include<iostream>
#include<algorithm>
using namespace std;

const int N = 1000010;
bool st[N];
int cnt, primes[N];

int get_primes(int n){
    for(int i = 2; i <= n; i++){
        if(!st[i]){
            primes[cnt++] = i;
            for(int j = i + i; j <= n; j += i) st[j] = true;
        }
    }
    return cnt;
}

int main(){
    int n;
    cin >> n;
    int res = get_primes(n);
    cout << res << endl;

    return 0;
}

线性筛法

思想:把每一个合数用它的某一个质因子筛掉即可
每个合数x一定会被筛掉,而且筛的时候一定用的是最小质因子,
而且每个数只有一个最小质因子,所以每个数只会被筛一次,所以是线性的。

代码实现

#include<iostream>
#include<algorithm>
using namespace std;

const int N = 1000010;
bool st[N];
int cnt, primes[N];

int get_primes(int n){
    for(int i = 2; i <= n; i++){
        if(!st[i]) primes[cnt++] = i;   //如果是质数,把它放到数表里面去
        //从小到大枚举所有的质数
        for(int j = 0; primes[j] <= n / i; j++){
            st[primes[j] * i] = true;       //把primes[j]这个质数的某个倍数筛掉即可(核心思想)
            //这个合数是前面某一个质数的倍数,已经筛掉了
            if(i % primes[j] == 0) break;   //(因为是从小到达枚举的所有的质数,所以第一次出现的primes[j]一定是i的最小质因子)
        }
    }
    return cnt;
}

int main(){
    int n;
    cin >> n;
    int res = get_primes(n);
    cout << res << endl;

    return 0;
}

作者:为梦而生
链接:https://www.acwing.com/file_system/file/content/whole/index/content/10509230/
来源:AcWing
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/169619.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于梯度算法优化概率神经网络PNN的分类预测 - 附代码

基于梯度算法优化概率神经网络PNN的分类预测 - 附代码 文章目录 基于梯度算法优化概率神经网络PNN的分类预测 - 附代码1.PNN网络概述2.变压器故障诊街系统相关背景2.1 模型建立 3.基于梯度优化的PNN网络5.测试结果6.参考文献7.Matlab代码 摘要&#xff1a;针对PNN神经网络的光滑…

卷积神经网络(VGG-19)灵笼人物识别

文章目录 前期工作1. 设置GPU&#xff08;如果使用的是CPU可以忽略这步&#xff09;我的环境&#xff1a; 2. 导入数据3. 查看数据 二、数据预处理1. 加载数据2. 可视化数据3. 再次检查数据4. 配置数据集5. 归一化 三、构建VGG-19网络1. 官方模型&#xff08;已打包好&#xff…

四川天蝶电子商务有限公司服务可靠吗?

作为当今最热门的社交媒体平台之一&#xff0c;抖音已经成为许多消费者和企业的重要销售渠道。然而&#xff0c;对于许多新手来说&#xff0c;如何在这个平台上开展电商服务却是一大难题。在这篇文章中&#xff0c;我们将探讨四川天蝶电子商务有限公司的抖音电商服务是否可靠&a…

我叫:插入排序【JAVA】

1.自我介绍 插入式排序属于内部排序法,是对于欲排序的元素以插入的方式找寻该元素的适当位置&#xff0c;以达到排序的目的。 2.继承我的思想 插入排序(Insertion Sorting)的基本思想是:把n个待排序的元素看成为一个有序表和一个无序表,开始时有序表中只包含一个元素,无序表中包…

使用Python实现几种底层技术的数据结构

使用Python实现几种底层技术的数据结构 数据结构(data structure)是带有结构特性的数据元素的集合&#xff0c;它研究的是数据的逻辑结构和数据的物理结构以及它们之间的相互关系&#xff0c;并对这种结构定义相适应的运算&#xff0c;设计出相应的算法&#xff0c;并确保经过这…

优秀智慧园区案例 - 佛山美的工业城零碳智慧园区,先进智慧园区建设方案经验

一、项目背景 美的工业园区西区最早建于上世纪90年代&#xff0c;到现在已经过去近30年&#xff0c;而这三十年恰恰是信息科技大发展的30年&#xff0c;原有的生产办公条件已不能很好的承载新时期办公和参观接待的需求。所以在21年美的楼宇科技事业部决定对原来的园区进行改造…

传统词嵌入方法的千层套路

诸神缄默不语-个人CSDN博文目录 在自然语言处理&#xff08;NLP&#xff09;领域&#xff0c;词嵌入是一种将词语转换为数值形式的方法&#xff0c;使计算机能够理解和处理语言数据。 词嵌入word embedding也叫文本向量化/文本表征。 本文将介绍几种流行的传统词嵌入方法。 文…

OpenHarmony Axios组件使用过程中,Api9不适配问题

大家好&#xff0c;我是【八戒&#xff0c;你又涨价了哎】 以下是我个人在学习OpenHarmony过程中的分享&#xff0c;请大家多多指教 目录 问题描述 解决方法 问题描述 使用axios组件的时候&#xff0c;把应用部署到开发板&#xff0c;提示Api9不适配 解决方法 对这类版本不…

共享内存和信号量的配合机制

进程之间共享内存的机制&#xff0c;有了这个机制&#xff0c;两个进程可以像访问自己内存中的变量一样&#xff0c;访问共享内存的变量。但是同时问题也来了&#xff0c;当两个进程共享内存了&#xff0c;就会存在同时读写的问题&#xff0c;就需要对于共享的内存进行保护&…

-bash: jps: command not found

背景 服务器的jdk通过yum 安装的&#xff0c;要用jps查询pid&#xff0c;提示找不到命令 yum install -y java-1.8.0-openjdk.x86_64 一、jps命令无法找到 [devhgh-tob-hsbc-dev-003 ~]$ jps -bash: jps: command not found 二、检查基础Java环境 [devhgh-tob-hsbc-dev-003 ~]…

OTP语音芯片 NV080D在智能空气检测仪的应用

随着人们对健康和环保的关注度不断提高&#xff0c;人们对看不见的家居环境也越来越重视。智能空气检测仪的市场需求也在不断增长中&#xff0c;呈现稳中向好的趋势。智能空气检测仪能够检测室内空气中的PM2.5、甲醛、TVOC等有害物质&#xff0c;同时还可以检测温湿度、空气质量…

进程管理(五)

处理器调度及多级调度 批量型往往先进入外存,再进入内存。终端型直接进入内存。 从磁盘选择若干作业,同时装入到内存,创建相应的进程,这是高级调度。 低级调度(进程调度):从进入内存的多道程序中选择一道把处理机给他 注意:时间片轮转是抢占式的 外设的调度统称为…

达索系统3DEXPERIENCE云端设计新体验

云是现代生活中必不可少的工具&#xff0c;在云端进行数据传输避免了传统的文件传输方式&#xff0c;更加方便快捷&#xff0c;节约了工作时间。 01 云端平台升级 在日常工作中有什么独特优势 在我们的生活工作中&#xff0c;云越来越多被提起&#xff0c;比如云计算、云服务…

网络工程师-HCIA网课视频学习

这里是速成的&#xff0c;只积累下&#xff0c;自己未曾学习到的东西。通过书本补充知识点。 视频&#xff1a;hcia17-链路聚合_哔哩哔哩_bilibili hcia16-路由高级特性&#xff1a; hcia17-链路聚合&#xff1a; 由于如果根据视频来学习的话&#xff0c;感觉视频的总结并不…

正则表达式在UI自动化中的秒用!

正则表达式在UI自动化中的秒用 正则表达式是一种用于匹配文本的强大工具&#xff0c;它可以用来搜索、替换和分析文本&#xff0c;也可以应用到「UI自动化中元素的定位中」。 接下来先看我们出错的代码&#xff0c;如下 poco("附近 第 1 个标签&#xff0c;共 3 个"…

设计模式-迭代器模式-笔记

动机&#xff08;Motivaton&#xff09; 在软件构建过程中&#xff0c;集合对象内部结构常常变化各异。但对于这些集合对象&#xff0c;我们呢希望在不暴露其内部结构的同时&#xff0c;可以让外部客户代码透明地访问其中包含的元素&#xff1b;同时这种“透明遍历”也为“同一…

力扣刷题-二叉树-二叉树的高度与深度

二叉树最大深度 给定一个二叉树 root &#xff0c;返回其最大深度。 二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。 示例 1&#xff1a; 输入&#xff1a;root [3,9,20,null,null,15,7] 输出&#xff1a;3 递归法 本题可以使用前序&#xff08;中左…

2024中国人民大学计算机考研分析

24计算机考研|上岸指南 中国人民大学 中国人民大学计算机考研招生学院是信息学院。目前均已出拟录取名单。 中国人民大学在1978年创立了经济信息管理系&#xff0c;它是国内最早建立的将数学与信息技术在经济管理领域应用为特色的系科。1986年&#xff0c;在原系计算站的基础…

一段来自《Verilog HDL 高级数字设计》的错误Verilog代码

笔者之前在阅读《Verilog HDL 高级数字设计》时的基4布斯乘法器一文时&#xff0c;就遇到了一段有问题的代码&#xff0c;而这个问题可以用Verilog基础&#xff1a;表达式位宽的确定&#xff08;位宽拓展&#xff09;文中的分析完美解决。 always (negedge clock) if (Start)…

认识前端包常用包管理工具(npm、cnpm、pnpm、nvm、yarn)

随着前端的快速发展,前端的框架越来越趋向于工程化,所以对于包的使用也越来越多,为了优化性能和后期的维护更新,对于前端包的管理也尤为重要,本文主要阐述对node中包管理工具的理解和简单的使用方法。也欢迎各位大佬和同行们多多指教。😁😁😁 👉1. npm 安装npm 通…