[题] 筛质数 #质数(素数)
题目
AcWing 868. 筛质数
题解
方法一:朴素筛法 及其优化:埃氏筛
从2~n枚举 i,再从小到大枚举所有已知的质数 primes[j],筛掉合数 i*primes[j],遇到新的质数就入队==
枚举所有小于n的数i,将i的所有倍数筛掉。
筛完后剩下的数就是质数。
朴素做法
void 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] = 1;//删掉它的所有倍数}
}
时间分析:n/2 + n/3 +....+n/n = n log n(大概)
- 朴素做法的优化:埃氏筛法。(此算法由一个埃及人发明,所以叫 埃氏筛法)
原理:当i不是质数时,没必要筛掉它的倍数,因为它的吧倍数将会是其它质数的倍数。- 筛到N时,如果N没有被筛掉,就说在
2~i-1中没有N的约数,所以N是质数。
时间是O(n log n)约等于O(n)(和O(n)一个级别)
3.补充:质数定理:1~n当中有 n / logn 个质数
埃氏筛法
void get_primes(int n ){for(int i = 2; i <= n; i ++){if(!st[i]) {primes[cnt ++] = n;//没被筛掉,说明是质数for(int j = i + i; j <= n; j += i)//干掉它的所有倍数st[j] = 1;} }
}
时间是O(n log log n)和O(n)一个级别
方法二:线性筛法求质数
原理 :n只会被n的最小质因子筛掉
操作 :
枚举i:(2~n)
i % primes[j] == 0
=>primes[j]一定是i的最小质因子.
=>primes[j]一定是primes[j] * i的最小质因子.i % primes[j] != 0
由于是从小到大枚举的质数,若此时还没枚举到i的任何一个质因子。
说明primes[j]一定小于i的最小质因子。
那么primes[j]也一定是primes[j] * i的最小质因子。
这个操作可以保证枚举到i时,所有小于等于i的合数都一定会被筛掉。
证明:对于任意一个合数x,假设primes[j]是x的最小质因数,i一定会在x之前枚举到x/primes[j],这时x就会被筛掉。
举例:
比如n=12时,x的最小质因数primes[j] = 2,
那么i一定会在12之前枚举到n/primes[j] = 6,此时就会把2*6 = 12 = n筛掉。
时间:数据范围在 107以上的时候,线性筛法比埃氏筛法快一倍。
void get_primes(int n ){for(int i = 2; i <= n; i ++){//没被筛掉说明是质数,将这个新的质数加入primes里if(!st[i]) primes[cnt ++] = i;//从小到大枚举所有已知的质数 primes[j]for(int j = 0; primes[j] <= n / i; j ++){ //当质数大于n / i的时候break;//等价于 primes[j] * i <= n;也就是筛掉所有小于n的合数就可以了//筛掉合数 i*primes[j]st[primes[j] * i] = 1; //当这句话发生的时候,primes[j]一定是i的最小质因子//那么用i的最小质因子筛掉i的目的已经达成了,所以跳出循环.if(i % primes[j] == 0) break;}}
}
代码
#include<bits/stdc++.h>
using namespace std;const int N = 1000010;int primes[N], cnt;
bool st[N];void 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] = 1;if(i % primes[j] == 0) break;}}
}int main(){int n;cin >> n;get_primes(n);cout << cnt << endl;return 0;
}
相关文章:
[题] 筛质数 #质数(素数)
题目 AcWing 868. 筛质数 题解 方法一:朴素筛法 及其优化:埃氏筛 从2~n枚举 i,再从小到大枚举所有已知的质数 primes[j],筛掉合数 i*primes[j],遇到新的质数就入队 枚举所有小于n的数i,将i的所有倍数筛掉。 筛完后剩下的数就是质数。 朴素做法 void ge…...
C进阶-语言文件操作
本章重点: 什么是文件 文件名 文件类型 文件缓冲区 文件指针 文件的打开和关闭文件的顺序读写文件的随机读写文件结束的判定 1. 什么是文件 磁盘上的文件是文件。 但是在程序设计中,我们一般谈的文件有两种:程序文件、数据文件 1.1 程序文件…...
17-spring aop调用过程概述
文章目录 1.源码2. debug过程1.源码 public class TestAop {public static void main(String[] args) throws Exception {saveGeneratedCGlibProxyFiles(System.getProperty("user.dir") + "/proxy");ApplicationContext ac = new ClassPathXmlApplicatio…...
微信小程序------框架
目录 视图层 WXML 数据绑定 列表渲染 条件渲染 模板 wsx事件 逻辑层 生命周期 跳转 视图层 WXML WXML(WeiXin Markup Language)是框架设计的一套标签语言,结合基础组件、事件系统,可以构建出页面的结构。 先在我们的项目中…...
Cross-Modal Joint Embedding with Diverse Semantics
计算两个嵌入之间的相似度得分,然后利用损失函数进行联合嵌入损失最小化优化并更新参数 辅助信息 作者未提供代码...
工具 | macOS 最简方式安装 adb 工具 | Mac
工具 | macOS 最简方式安装 adb 工具 | Mac 介绍 ADB(Android Debug Bridge)是 Android开发工具包(SDK)中的一项实用工具,用于与 Android 设备进行通信和调试。 在 macOS 操作系统上安装 ADB 环境可以帮助开发人员与…...
linux进阶(脚本编程/软件安装/进程进阶/系统相关)
一般市第二种,以bash进程执行 shelle脚本编程 env环境变量 set查看所有变量 read设置变量值 echo用于控制台输出 类似java中的sout declear/typeset声明类型 范例 test用于测试表达式 if/else case while for 函数 脚本示例 软件安装及进阶 fork函数(复制一个进程(开启一个进…...
谷歌云:下一代开发者和企业解决方案的强力竞争者
自从2018年Oracle前研发总裁Thomas Kurian加入谷歌云(Google Cloud)并出任谷歌云CEO以来,业界对于谷歌云的发展就十分好奇。而谷歌云的前任CEO Diane Greene曾是VMware的创始人之一,那么两任企业级技术和解决方案出身的CEO&#x…...
任务分配问题(回溯法)
算法设计 问题描述 有n(n≥1)个任务需要分配给n个人执行,每个任务只能分配给一个人,每个人只能执行一个任务。 第i个人执行第j个任务的成本是c[i][j](1≤i,j≤n)。求出总成本最小的分配方案 …...
华为OD 字符串消除(100分)【java】A卷+B卷
华为OD统一考试A卷+B卷 新题库说明 你收到的链接上面会标注A卷还是B卷。目前大部分收到的都是B卷。 B卷对应20022部分考题以及新出的题目,A卷对应的是新出的题目。 我将持续更新最新题目 获取更多免费题目可前往夸克网盘下载,请点击以下链接进入: 我用夸克网盘分享了「华为O…...
索引背后的数据结构——B+树
为什么要使用B树? 可以进行数据查询的数据结构有二叉搜索树、哈希表等。对于前者来说,树的高度越高,进行查询比较的时候访问磁盘的次数就越多。而后者只有在数据等于key值的时候才能进行查询,不能进行模糊匹配。所以出现了B树来解…...
面试用-常用注解
Configuration 注意由ConfigurationClassPostProcessor来处理ConfigurationClassPostProcessor执行这个后置处理 ConfigurationClassParser.parse执行这个方法里面会解析很多注解。1、Component 对于Component也是一样递归调用parse方法,一层层解析…...
【c++】跟webrtc学std array 4: H264PacketBuffer 包缓存
H264PacketBuffer m98代码:H264PacketBuffer 类似于PacketBuffer ,但仅用于H264// The H264PacketBuffer does the same job as the PacketBuffer but for H264 // only. To make it fit in with surronding code the PacketBuffer input/output // classes are used. 因此,…...
Nodejs Web数据库应用演示实例
Nodejs Web应用基础演示实例 Web数据库应用 一、服务器端 var express require(express); var app express(); var mysql require(mysql);//设置静态资源目录public app.use(express.static(__dirname /public));//创建mysql数据库访问连接(数据库主机地址&a…...
Vue 中setup的特性
特性四:父传子组件传参【defineProps】: 父组件(传递数据):利用自定义属性传递数据。 <template><h3>我是父组件</h3><hr /><Child :name"info.name" :age"info.age"…...
Peter算法小课堂—正整数拆分
大家可能会想:正整数拆分谁不会啊,2年级就会了,为啥要学啊 例题 正整数拆分有好几种,这里我们列举两种讲。 关系 我们看着第一幅图,头向左转90,记住你看到的图,再来看第二幅图,你…...
EDUSRC--简单打穿某985之旅
免责声明: 文章中涉及的漏洞均已修复,敏感信息均已做打码处理,文章仅做经验分享用途,切勿当真,未授权的攻击属于非法行为!文章中敏感信息均已做多层打马处理。传播、利用本文章所提供的信息而造成的任何直…...
vue2升级到vue2.7
vue2升级到vue2.7 小小的改进,大大的提升 只需要简单修改,开发体验得到大大提升. 为什么要升级Vue2.7 不能拒绝的理由: 组合式 API(解决mixins问题:命名冲突,隐式依赖)单文件组件内的 <script setup>语法模板表达式中支持 ESNext 语法(可选链:?.、空值合并:??)单文…...
【django2.0之Rest_Framework框架一】rest_framework序列器介绍
Django RestFramework(简称DRF) 提供了序列化器Serialzier的定义,可以帮助我们简化序列化与反序列化的过程,不仅如此,还提供丰富的类视图、扩展类、视图集来简化视图的编写工作。REST framework还提供了认证、权限、限流、过滤、分页、接口文…...
Mock 测试详解:什么是 Mock 测试
Mock测试 什么是 Mock ? Mock 的意思就是,当你很难拿到源数据时,你可以使用某些手段,去获取到跟源数据相似的假数据,拿着这些假数据,前端可以先行开发,而不需要等待后端给了数据后再开发。 Mo…...
MCP 2026负载均衡黄金配置清单(仅限首批认证架构师内部流通版),含3个未公开API参数与2个规避CNCF兼容性警告的绕行方案
更多请点击: https://intelliparadigm.com 第一章:MCP 2026跨服务器负载均衡架构演进与核心定位 MCP(Multi-Cluster Proxy)2026 是面向超大规模分布式服务的新一代负载均衡控制平面,其核心突破在于将传统单集群 LB 的…...
终极指南:如何使用哔咔漫画下载器快速建立个人漫画图书馆
终极指南:如何使用哔咔漫画下载器快速建立个人漫画图书馆 【免费下载链接】picacomic-downloader 哔咔漫画 picacomic pica漫画 bika漫画 PicACG 多线程下载器,带图形界面 带收藏夹,已打包exe 下载速度飞快 项目地址: https://gitcode.com/…...
AsrTools:3步完成音频转文字,本地免费语音识别工具
AsrTools:3步完成音频转文字,本地免费语音识别工具 【免费下载链接】AsrTools ✨ AsrTools: Smart Voice-to-Text Tool | Efficient Batch Processing | User-Friendly Interface | No GPU Required | Supports SRT/TXT Output | Turn your audio into a…...
MCP 2026沙箱资源隔离白皮书首发:23项隔离指标基准测试、ARM/x86差异对比及FIPS 140-3合规路径
更多请点击: https://intelliparadigm.com 第一章:MCP 2026沙箱资源隔离白皮书概述 MCP 2026(Multi-Context Partitioning 2026)沙箱是面向云原生安全执行环境设计的下一代资源隔离框架,旨在为微服务、AI推理任务及敏…...
MCP 2026车载系统数据交互实战手册:从CAN FD/ETH双总线协同到TSN时间敏感同步的12步落地清单
更多请点击: https://intelliparadigm.com 第一章:MCP 2026车载系统数据交互全景概览 MCP 2026(Modular Communication Platform 2026)是新一代车规级通信中间件平台,专为高实时性、多域融合的智能座舱与自动驾驶协同…...
小型语言模型在硬件设计中的高效应用与优化
1. 小型语言模型在硬件设计中的崛起 在半导体行业,AI辅助设计流程正面临着一个关键的可持续发展挑战。当前业界越来越依赖AI来提升生产力,但基于大型语言模型(LLM)的设计自动化带来了巨大的成本负担。以GPT-4为例,每处理1K个token需要消耗0.0…...
成年人最亏本的买卖:拿精密仪器的保修期拼前途
春节前的一天深夜,我去首都机场接个老朋友。回来的路上,顺道在望京的一个路口停下,去便利店买水。刚结完账,就碰见以前带过的一个后端开发,小张。小张今年刚过三十,手里攥着两罐红牛和一盒感冒药࿰…...
AI代码执行沙箱从POC到生产环境的生死7步(附Gartner评估矩阵与内部审计检查表)
更多请点击: https://intelliparadigm.com 第一章:AI代码执行沙箱从POC到生产环境的生死7步(附Gartner评估矩阵与内部审计检查表) AI代码执行沙箱正从实验室原型快速演进为金融、云原生与DevSecOps流水线中的关键信任组件。然而&…...
小米智能门锁临时密码管理:hass-xiaomi-miot数字组件实战指南
小米智能门锁临时密码管理:hass-xiaomi-miot数字组件实战指南 【免费下载链接】hass-xiaomi-miot Automatic integrate all Xiaomi devices to HomeAssistant via miot-spec, support Wi-Fi, BLE, ZigBee devices. 小米米家智能家居设备接入Hass集成 项目地址: ht…...
深入WiredTiger引擎:从`tcmalloc`到`cache_overhead`,图解MongoDB内存管理的那些“隐藏”开销
深入WiredTiger引擎:从tcmalloc到cache_overhead,图解MongoDB内存管理的那些“隐藏”开销 当你的MongoDB实例突然因为内存不足而崩溃时,是否曾疑惑过:明明设置了内存限制,为什么实际使用量还是会超标?这背后…...
