素数筛选-埃拉托斯特尼筛法

      首先,默认大家都知道素数(质数)吧,就是对于一个正整数n,如果能且仅能被1和n整除,那么这个数n为素数~ps:0,1不是质数。

那么对于判断一个数是否为素数,起初的做法是我们从i=2开始,判断n%i!=0,然后i++一直到n-1,如果全部满足不能整除那么此n为素数。

大家都知道其实不用判断到n-1,只要到sqrt(n)就ok了,这是为什么呢,这里就不解释了- -(本人虽然菜鸟,但还是觉得好啰嗦)

      对于任何一个整数n可以通过以上方法来判断n是否为素数,若如果要你找出从1~n中所有的素数,那是不是对于每个n都要去判断一次呢?

假如n=1000000;那么这个算法的时间复杂度为o(n*sqrt(n)),这个数有多大我就不解释了。。。那是你的计算机跑几分钟都跑不完的。所以

我在这里介绍一种时间为o(n*lgn)的算法,它的名字叫做:埃拉托斯特尼筛法。

  终于切入正题,其实这种筛选法特别好理解。首先我们把所有的数标记为素数(true),就是我们从2开始,找出所有2的倍数,把它标记为不是素数(false)(当然不是素数),再找到3,找出所有3的倍数,也标记为不是素数(false),再找到下一个标记为(true)的数k,再去找到所有k的倍数,标记为(false),依次类推...那么剩下来的数就都是素数了.如果你还不理解就看代码吧,写的很详细。(visit[i]用来判断i是素数还是合数)

View Code
 1 //====================================================================
 2 //Name       :埃拉托斯特尼筛法---列出小于给定数的所有素数的算法
 3 //Author     :hxf
 4 //copyright  :http://www.cnblogs.com/Free-rein/
 5 //Description:时间复杂度O(n*lgn)
 6 //Data       :2012.7.27
 7 //========================================================================
 8 #include<iostream>
 9 #include<algorithm>
10 #include<stdio.h>
11 #include<math.h>
12 #include<string.h>
13 #include <vector>
14 #include <stack>
15 #define MAX 200002//prime的数组大小
16 #define inf 1499999//prime的数据范围
17 using namespace std;
18 int prime[MAX];//质数的数组,从1~MAX
19 bool visit[inf];//判断第i个数是否为质数
20 void get_prime()
21 {
22     int temp=1;//代表prime的下标,共temp-1个数
23     for(int i=2;i<=inf;i++)
24         visit[i]=true;
25     for(int i=2;i*i<=inf;i++)
26     {
27         if(visit[i]==true)//找到一个数为素数
28         {
29             for(int j=i;i*j<=inf;j++)//标记i的所有倍数为false
30                 visit[i*j]=false;
31         }
32     }
33     for(int i=2;i<=inf;i++)
34         if(visit[i]==true)
35         {
36             prime[temp++]=i;//把留下来的素数存下来就ok了
37         }
38 }
39 int main()
40 {
41     return 0;
42 }

 

 

转载于:https://www.cnblogs.com/Free-rein/archive/2012/08/14/2638230.html

量化交易新手必看:如何用vnpy+Tushare轻松获取A股历史数据(附完整代码) 本文为量化交易新手提供了使用vnpy和Tushare构建A股历史数据获取系统的完整指南。通过详细的代码示例,手把手教你搭建环境、封装数据获取引擎,并实现日线等数据的格式转换与本地存储,为策略回测与分析奠定坚实的数据基础。 阅读详情

相关推荐

macOS Monterey官方镜像高速下载指南(附迅雷链接+兼容性清单)

本文提供macOS Monterey官方镜像的高速下载指南,重点介绍利用迅雷等工具加速下载官方安装包的有效方法。同时,详细列出了系统兼容性清单,帮助用户在下载前确认设备支持,并分享了从下载、验证到安全安装的完整流程与常见问题解决方案。

j7k8l的博客 2184

埃拉托斯特尼筛法求质数

该方法主要的思想就是除去不大于根号n的素数的倍数,剩下的就是素数,素数的倍数肯定就不会是素数了嘛。 首先排列出从2到n所有的数: 取n为13时:2,3,4,5,6,7,8,9,10,11,12,13。 首先第一个素数是2,那么就可以排除掉所有2的倍数 序列变成了:2,3,5,7,9,11,13 因为2小于根号n(在这里就是根号13)所以遍历继续 第二个素数是3,那么就可以排除掉所有3的倍数 序列变成了:2,3,5,7,11,13 3小于根号n,遍历继续 第三个素数是5,那么就可以排除掉所有5的倍数 序列变成

weixin_51564239的博客 582

在Cursor IDE中集成Datadog监控:自然语言查询实战指南

在云原生和微服务架构中,可观测性(Observability)已成为保障系统稳定性的核心技术支柱。其核心原理是通过日志(Logs)、指标(Metrics)和追踪(Traces)三大支柱,实时采集并呈现系统的运行状态。这项技术的价值在于,它让开发者能够透视复杂的分布式系统,快速定位性能瓶颈与故障根因。在实际的工程实践中,开发人员常常需要在编码环境与监控平台之间频繁切换,这种上下文切换严重影响了排障效率。本文聚焦于如何利用Model Context Protocol(MCP),将强大的Datadog可观测性平台

weixin_42519772的博客 348

如何快速查找质数

质数(素数),指在大于 1 的自然数中,除了 1 和该数自身外,无法被其他自然数整除的数(如 2,3,5,7,11 ……)。那么,如何能简单快速地找出质数呢? 埃拉托斯特尼筛法 埃拉托斯特尼(Eratosthenes)是一位古希腊数学家、地理学家、历史学家、诗人、天文学家,也是阿基米德的好基友。除了发明质数的筛选方法,他还测量地球周长、日地间距、地月间距,编排星图,绘制地图,把名字写在月球上(埃...

badcow的博客 1万+

LinuxCNC---在PC端显示开发板LinuxCNC界面

  今天在调试开发板时,执行开发板上的linuxcnc指令,总是出现如下报错 LINUXCNC - 2.9.0~pre0 application-specific initialization failed: couldn't connect to display "192.168.137.3:1" Error in startup script: invalid command name "image" while executing "image create photo -file $f/$i

中华田园巨龙 3470

Python 驱动 CAD 二次开发:从零搭建自动化绘图环境

本文详细介绍了如何利用Python进行CAD二次开发,实现自动化绘图。通过win32com库建立Python与CAD软件的通信,文章从环境搭建、连接CAD、操作文档到核心绘图与批量处理,提供了完整的实战指南。该方法能显著提升机械设计、建筑绘图等领域的重复性工作效率,将创造力从繁琐劳动中解放出来。

weixin_29093169的博客 1230

埃拉托斯特尼筛法(Java实现)

维基百科: 埃拉托斯特尼筛法 简称埃氏筛,也称素数筛。这是一种简单且历史悠久的筛法,用来找出一定范围内所有的素数。所使用的原理是从2开始,将每个素数的各个倍数,标记成合数。一个素数的各个倍数,是一个差为此素数本身的等差数列。此为这个筛法和试除法不同的关键之处,后者是以素数来测试每个待测数能否被整除。 埃拉托斯特尼筛法是列出所有小素数最有效的方法之一,其名字来自于古希腊数学家埃拉托斯特尼,并且被...

swordsmanye的博客 3490

PCB激光直接成像(LDI)设备技术解析与优化方案

激光直接成像(LDI)是PCB制造中的关键数字化工艺,通过激光束直接在基板上形成电路图案。其核心技术在于高精度光学系统与智能控制算法的结合,工作精度可达微米级。在HDI板、柔性电路等高端PCB制造中,LDI技术能显著提升线宽精度和层间对位准确性。当前行业面临材料适配性、热变形控制等挑战,动态能量补偿、多波长曝光等创新方案正在突破这些瓶颈。随着模块化设计、预测性维护等工程实践的普及,LDI设备综合效率持续提升,为5G、汽车电子等领域的精密电路生产提供关键技术支撑。

weixin_29168393的博客 393

使用poi-tl循环导出word报表

根据模板循环生成表格,每个表格再循环填充数据,也就是两层循环,第一层循环是学生学期信息,第二层循环是学生的成绩数据。先看模板和导出的效果。

程高伟 6278

【毕设全程指导】基于YOLOv8的包装商品检测与可视化系统(SKU110K实战)

本文介绍了一个基于YOLOv8的包装商品检测与可视化系统毕业设计方案。项目采用SKU110K数据集,通过CSV转TXT格式转换适配YOLO模型训练,包含详细的环境搭建、模型配置和训练流程。系统实现了包装商品的自动化检测,并开发了Tkinter可视化界面进行交互式检测展示。该方案结合产业应用需求与技术深度,既具备实用价值,又能充分展示学生的技术能力,适合作为计算机视觉相关专业的毕业设计选题。整个项目从数据准备到界面开发完整覆盖,帮助学生系统掌握目标检测项目的完整实现流程。

LXY_LOVE36的博客 147

AutoSAR配置与实践(基础篇)2.5 RTE对数据一致性的管理

SWC内部不同的Runnable访问共同全局变量,Runnable类似C文件中的函数,这些函数如果被放在不同Task上运行, 可能出现出现同一时刻多个函数共同运行的情况。可以通过为受影响的任务分配相同的优先级,为受影响的任务分配相同的内部操作系统资源,或者将OS的任务配置为非抢占性来实现。数据一致性:当多个操作同时读写同一个数据,由于任务的抢占,出现了数据被篡改的情况,造成非预期的数据结果。SWC内部变量保护,限定局变量的作用域在变量的作用域在SWC的不同runnable间。

nihaoljq2010的博客 2628

别再手动复制粘贴了!用poi-tl 1.10.5实现Word成绩单批量生成(附完整Java代码)

本文详细介绍了如何使用poi-tl 1.10.5实现Word成绩单的批量生成,通过模板设计和双层循环结构,大幅提升教务工作效率。文章包含完整的Java代码示例,涵盖Spring Boot集成、数据模型构建和高级应用场景,帮助开发者快速掌握自动化报表生成技术。

weixin_28481133的博客 175

AIGC游戏本地化:用AI实现多语言自动翻译

游戏本地化是游戏全球化战略的关键环节,传统人工翻译方式成本高、周期长。本文旨在探讨如何利用AIGC技术实现高效、准确、低成本的游戏多语言自动翻译解决方案。我们将覆盖从文本翻译到语音合成的完整本地化流程,重点关注AI技术在游戏特定语境下的应用优化。文章首先介绍游戏本地化的核心挑战和AI解决方案,然后深入讲解关键技术原理,接着通过实战项目演示具体实现,最后讨论应用场景和未来趋势。AIGC:人工智能生成内容,指利用AI技术自动生成文本、图像、音频等内容本地化(Localization)

AI 领航者的博客 1339

埃拉托斯特尼筛法 VS 欧拉筛法 (素数筛选) Java

话不多说,一切尽在代码中!!!推荐使用欧拉筛法,毕竟是线性筛法。import java.util.Arrays;/** * 埃拉托斯特尼筛法 VS 欧拉筛法(更优化) * * @author TinyDolphin * */ public class Main { private static final int MAX_LENGTH_CHECK = 100000000;

TinyDolphin的博客 3904

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

埃拉托斯特尼筛法(素数高效筛选)

一、素数定义     素数又称质数(prime number),指所有大于1的数中只能被1和它本身整除的数。 二、埃拉托斯特尼筛法(Sieve of Eratosthenes)     1.算法的基本思想:         如果一个数是质数,那么它的倍数肯定非质,利用事先定义的线性表以打表方式标记非质,则剩下的数就是素数。     2.筛选过程:      三、算法实现 c...

[SZU_Crayon] 5144

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

用来筛选素数的两种方法和应用场景

通过这种方法,欧拉筛法能够在时间复杂度为 O(n) 的情况下高效地找出素数,避免了埃拉托斯特尼筛法中的重复标记,提高了筛选效率。埃拉托斯特尼筛法的原理是从2开始,逐步标记素数的倍数为非素数,最终得到所有的素数。总的来说,欧拉筛在效率上优于埃拉托斯特尼筛法,特别是在处理大规模素数筛选时具有明显的优势。欧拉筛的原理是通过线性筛选的方式,避免了重复标记,从而高效地找出素数。通过这种方法,埃拉托斯特尼筛法能够高效地找出一定范围内的所有素数。

2302_77201200的博客 1818

matlab 埃拉托斯特尼筛法,Matlab环境下素数筛选算法的分析及比较

第 1 .第期 9巷20 0 9年 3月.计算机技术与发展(( M It ER E(HN( L : ANI、 ) 门。 F 7 ) ( Y )DEVEI I l:』) FNTV( .9 No. ) 1 1 3Ma. 2 0 r 09Mal t b环境下素数筛选算法的分析及比较 a张琦许勇2,(. 1西北大学软件学院,陕西西安 7 02;: 17 12安徽师范大学数学计算机科学学院, .安徽芜...

weixin_29378153的博客 571

关于如何快速筛选素数的问题

在浏览某位大佬学弟的博客时,看到了一种线性筛选素数的方法,觉得很有用,所以给大家分享出来。这种筛选的方法名叫做埃拉托斯特尼筛法:要得到自然数n以内的全部素数,只需要把不大于根号n的所有素数的倍数剔除,剩下的就是素数。思想:假设全部数均为素数,再通过剔除掉所有合数,剩下的数就为素数。 代码如下: #include<bits/stdc++.h> using namespace std; i...

Kobe_G的博客 806

素数筛选法(埃拉托斯特尼筛法)

统计所有小于非负整数 n 的质数的数量。 示例 1: 输入:n = 10 输出:4 解释:小于 10 的质数一共有 4 个, 它们是 2, 3, 5, 7 。 示例 2: 输入:n = 0 输出:0 示例 3: 输入:n = 1 输出:0 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/count-primes 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。 筛选法的主要思想就是,找到每个素数,然后根据素数的.

ambiguous__的博客 4731

筛选法求素数&一般方法求素数&判断一个数是否是素数

筛选法求素数&一般方法求素数&判断一个数是否是素数 1.判断一个数是否是素数 #include<stdio.h> #include<math.h> int main() { int n, i, k; printf("please enter a integer number"); scanf_s("%d", &n); k = sqrt(n); for (i = 2; i ...

Player_HA的博客 7192

Python素数筛选法

原理:   素数,指在一个大于1的自然数中,除了1和此整数自身外,不能被其他自然数整除的数。在加密应用中起重要的位置,比如广为人知的RSA算法中,就是基于大整数的因式分解难题,寻找两个超大的素数然后相乘作为密钥的。一个比较常见的求素数的办法是埃拉托斯特尼筛法(the Sieve of Eratosthenes) ,说简单一点就是画表格,然后删表格,如图所示:   从2开始依次往后面数,

魔神翼 1万+

素数筛选法

埃拉托斯特尼筛法 质数的倍数必然不是质数,所以遇到质数,就把他的倍数划掉 const int N = 10001; //false为质数,true为合数 bool visit[N]; void eratosthenesSieve() { //0,1特判 visit[0] = visit[1] = true; for (int i = 2; i*i < N; ++i) { ...

思维缜密的博客 2716

python实现素数筛选法_python素数筛选法浅析

原理:素数,指在一个大于1的自然数中,除了1和此整数自身外,不能被其他自然数整除的数。在加密应用中起重要的位置,比如广为人知的RSA算法中,就是基于大整数的因式分解难题,寻找两个超大的素数然后相乘作为密钥的。一个比较常见的求素数的办法是埃拉托斯特尼筛法(the Sieve of Eratosthenes) ,说简单一点就是画表格,然后删表格,如图所示:从2开始依次往后面数,如果当前数字一个素数,那...

weixin_29144945的博客 1260

快速找到两个自然数之间的所有素数:埃拉托斯特尼筛法详解

埃拉托斯特尼筛法(简称埃氏筛)是一种用于查找素数的经典算法。它的基本思想是从小到大遍历所有自然数,依次筛去每个素数的倍数,剩下的未被筛去的数就是素数。

罐装旺仔的博客院子 731

素数(质数)判断的五种方法

素数判断的五种方法 素数的介绍 素数定义 质数(prime number)又称素数,有无限个。一个大于1的自然数,除了1和它本身外,不能被其他自然数整除,换句话说就是该数除了1和它本身以外不再有其他的因数;否则称为合数。 根据算术基本定理,每一个比1大的整数,要么本身是一个质数,要么可以写成一系列质数的乘积;而且如果不考虑这些质数在乘积中的顺序,那么写出来的形式是唯一的。最小的质数是2。                         --------360百科 第一种:暴力筛选法 思路分析 根据素数的

qq_43695957的博客 13万+

★判断素数的几种方法(由易到难,由慢到快)

素数,又称为质数,指的是“大于1的整数中,只能被1和这个数本身整除的数”。换句话说,素数是只有两个正约数(1和本身)的自然数。素数在数论中有着重要的地位,且素数的个数是无限的。例如,2、3、5、7、11、13等都是素数。判断一个数是否为素数的方法有多种,包括试除法、埃筛法等。

qq_46664080的博客 1368
上一篇: POJ-2192(Zipper)
下一篇: URAL-1830(Help in the RNOS)解题报告
badao7116
博客等级 码龄11年 0粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值