当前位置: 首页 > news >正文

[题] 筛质数 #质数(素数)

题目

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(大概)
  1. 朴素做法的优化:埃氏筛法。(此算法由一个埃及人发明,所以叫 埃氏筛法)
    原理:当i不是质数时,没必要筛掉它的倍数,因为它的吧倍数将会是其它质数的倍数。
  2. 筛到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)

  1. i % primes[j] == 0
    => primes[j]一定是i的最小质因子.
    => primes[j]一定是primes[j] * i的最小质因子.
  2. 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. 筛质数 题解 方法一&#xff1a;朴素筛法 及其优化&#xff1a;埃氏筛 从2~n枚举 i,再从小到大枚举所有已知的质数 primes[j],筛掉合数 i*primes[j],遇到新的质数就入队 枚举所有小于n的数i,将i的所有倍数筛掉。 筛完后剩下的数就是质数。 朴素做法 void ge…...

C进阶-语言文件操作

本章重点&#xff1a; 什么是文件 文件名 文件类型 文件缓冲区 文件指针 文件的打开和关闭文件的顺序读写文件的随机读写文件结束的判定 1. 什么是文件 磁盘上的文件是文件。 但是在程序设计中&#xff0c;我们一般谈的文件有两种&#xff1a;程序文件、数据文件 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&#xff08;WeiXin Markup Language&#xff09;是框架设计的一套标签语言&#xff0c;结合基础组件、事件系统&#xff0c;可以构建出页面的结构。 先在我们的项目中…...

Cross-Modal Joint Embedding with Diverse Semantics

计算两个嵌入之间的相似度得分&#xff0c;然后利用损失函数进行联合嵌入损失最小化优化并更新参数 辅助信息 作者未提供代码...

工具 | macOS 最简方式安装 adb 工具 | Mac

工具 | macOS 最简方式安装 adb 工具 | Mac 介绍 ADB&#xff08;Android Debug Bridge&#xff09;是 Android开发工具包&#xff08;SDK&#xff09;中的一项实用工具&#xff0c;用于与 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加入谷歌云&#xff08;Google Cloud&#xff09;并出任谷歌云CEO以来&#xff0c;业界对于谷歌云的发展就十分好奇。而谷歌云的前任CEO Diane Greene曾是VMware的创始人之一&#xff0c;那么两任企业级技术和解决方案出身的CEO&#x…...

任务分配问题(回溯法)

算法设计 问题描述 有n&#xff08;n≥1&#xff09;个任务需要分配给n个人执行&#xff0c;每个任务只能分配给一个人&#xff0c;每个人只能执行一个任务。 第i个人执行第j个任务的成本是c[i][j]&#xff08;1≤i&#xff0c;j≤n&#xff09;。求出总成本最小的分配方案 …...

华为OD 字符串消除(100分)【java】A卷+B卷

华为OD统一考试A卷+B卷 新题库说明 你收到的链接上面会标注A卷还是B卷。目前大部分收到的都是B卷。 B卷对应20022部分考题以及新出的题目,A卷对应的是新出的题目。 我将持续更新最新题目 获取更多免费题目可前往夸克网盘下载,请点击以下链接进入: 我用夸克网盘分享了「华为O…...

索引背后的数据结构——B+树

为什么要使用B树&#xff1f; 可以进行数据查询的数据结构有二叉搜索树、哈希表等。对于前者来说&#xff0c;树的高度越高&#xff0c;进行查询比较的时候访问磁盘的次数就越多。而后者只有在数据等于key值的时候才能进行查询&#xff0c;不能进行模糊匹配。所以出现了B树来解…...

面试用-常用注解

Configuration 注意由ConfigurationClassPostProcessor来处理ConfigurationClassPostProcessor执行这个后置处理 ConfigurationClassParser.parse执行这个方法里面会解析很多注解。1、Component 对于Component也是一样递归调用parse方法&#xff0c;一层层解析…...

【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数据库访问连接&#xff08;数据库主机地址&a…...

Vue 中setup的特性

特性四&#xff1a;父传子组件传参【defineProps】&#xff1a; 父组件&#xff08;传递数据&#xff09;&#xff1a;利用自定义属性传递数据。 <template><h3>我是父组件</h3><hr /><Child :name"info.name" :age"info.age"…...

Peter算法小课堂—正整数拆分

大家可能会想&#xff1a;正整数拆分谁不会啊&#xff0c;2年级就会了&#xff0c;为啥要学啊 例题 正整数拆分有好几种&#xff0c;这里我们列举两种讲。 关系 我们看着第一幅图&#xff0c;头向左转90&#xff0c;记住你看到的图&#xff0c;再来看第二幅图&#xff0c;你…...

EDUSRC--简单打穿某985之旅

免责声明&#xff1a; 文章中涉及的漏洞均已修复&#xff0c;敏感信息均已做打码处理&#xff0c;文章仅做经验分享用途&#xff0c;切勿当真&#xff0c;未授权的攻击属于非法行为&#xff01;文章中敏感信息均已做多层打马处理。传播、利用本文章所提供的信息而造成的任何直…...

vue2升级到vue2.7

vue2升级到vue2.7 小小的改进,大大的提升 只需要简单修改,开发体验得到大大提升. 为什么要升级Vue2.7 不能拒绝的理由: 组合式 API(解决mixins问题:命名冲突,隐式依赖)单文件组件内的 <script setup>语法模板表达式中支持 ESNext 语法(可选链:?.、空值合并:??)单文…...

【django2.0之Rest_Framework框架一】rest_framework序列器介绍

Django RestFramework(简称DRF) 提供了序列化器Serialzier的定义&#xff0c;可以帮助我们简化序列化与反序列化的过程&#xff0c;不仅如此&#xff0c;还提供丰富的类视图、扩展类、视图集来简化视图的编写工作。REST framework还提供了认证、权限、限流、过滤、分页、接口文…...

Mock 测试详解:什么是 Mock 测试

Mock测试 什么是 Mock &#xff1f; Mock 的意思就是&#xff0c;当你很难拿到源数据时&#xff0c;你可以使用某些手段&#xff0c;去获取到跟源数据相似的假数据&#xff0c;拿着这些假数据&#xff0c;前端可以先行开发&#xff0c;而不需要等待后端给了数据后再开发。 Mo…...

MCP 2026负载均衡黄金配置清单(仅限首批认证架构师内部流通版),含3个未公开API参数与2个规避CNCF兼容性警告的绕行方案

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;MCP 2026跨服务器负载均衡架构演进与核心定位 MCP&#xff08;Multi-Cluster Proxy&#xff09;2026 是面向超大规模分布式服务的新一代负载均衡控制平面&#xff0c;其核心突破在于将传统单集群 LB 的…...

终极指南:如何使用哔咔漫画下载器快速建立个人漫画图书馆

终极指南&#xff1a;如何使用哔咔漫画下载器快速建立个人漫画图书馆 【免费下载链接】picacomic-downloader 哔咔漫画 picacomic pica漫画 bika漫画 PicACG 多线程下载器&#xff0c;带图形界面 带收藏夹&#xff0c;已打包exe 下载速度飞快 项目地址: https://gitcode.com/…...

AsrTools:3步完成音频转文字,本地免费语音识别工具

AsrTools&#xff1a;3步完成音频转文字&#xff0c;本地免费语音识别工具 【免费下载链接】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合规路径

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;MCP 2026沙箱资源隔离白皮书概述 MCP 2026&#xff08;Multi-Context Partitioning 2026&#xff09;沙箱是面向云原生安全执行环境设计的下一代资源隔离框架&#xff0c;旨在为微服务、AI推理任务及敏…...

MCP 2026车载系统数据交互实战手册:从CAN FD/ETH双总线协同到TSN时间敏感同步的12步落地清单

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;MCP 2026车载系统数据交互全景概览 MCP 2026&#xff08;Modular Communication Platform 2026&#xff09;是新一代车规级通信中间件平台&#xff0c;专为高实时性、多域融合的智能座舱与自动驾驶协同…...

小型语言模型在硬件设计中的高效应用与优化

1. 小型语言模型在硬件设计中的崛起 在半导体行业&#xff0c;AI辅助设计流程正面临着一个关键的可持续发展挑战。当前业界越来越依赖AI来提升生产力&#xff0c;但基于大型语言模型(LLM)的设计自动化带来了巨大的成本负担。以GPT-4为例&#xff0c;每处理1K个token需要消耗0.0…...

成年人最亏本的买卖:拿精密仪器的保修期拼前途

春节前的一天深夜&#xff0c;我去首都机场接个老朋友。回来的路上&#xff0c;顺道在望京的一个路口停下&#xff0c;去便利店买水。刚结完账&#xff0c;就碰见以前带过的一个后端开发&#xff0c;小张。小张今年刚过三十&#xff0c;手里攥着两罐红牛和一盒感冒药&#xff0…...

AI代码执行沙箱从POC到生产环境的生死7步(附Gartner评估矩阵与内部审计检查表)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;AI代码执行沙箱从POC到生产环境的生死7步&#xff08;附Gartner评估矩阵与内部审计检查表&#xff09; AI代码执行沙箱正从实验室原型快速演进为金融、云原生与DevSecOps流水线中的关键信任组件。然而&…...

小米智能门锁临时密码管理:hass-xiaomi-miot数字组件实战指南

小米智能门锁临时密码管理&#xff1a;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引擎&#xff1a;从tcmalloc到cache_overhead&#xff0c;图解MongoDB内存管理的那些“隐藏”开销 当你的MongoDB实例突然因为内存不足而崩溃时&#xff0c;是否曾疑惑过&#xff1a;明明设置了内存限制&#xff0c;为什么实际使用量还是会超标&#xff1f;这背后…...