素数的筛法
1|0定义
素数, 又称质数, 指因数只有两个的数 (及自己和1)。
注意:1与0不是质数, 因为其因数个数小于2
2|0求素数
2|1法一:直接求解
基本的解法就是从定义入手, 既然定义是除了1与自己以外没有其它因数, 那么我们询问n是否是质数时就可以枚举x, 判断x是否是n的因数。
代码:
优化
我们知道, 若则若那么, 一定有, 若那么, 一定有, 所以我们其实只要枚举所有小于等于的大于一整正数就行了。
代码:
2|2法二:埃拉托斯特尼筛法
我们知道, 每一个数都可以分解成若干个质数之积(证明方法:。。。没找到), 所以我们只需要找到一个质数后将其倍数都置为无法选择, 就可以了。
代码:
这种方法还有另一个优势就是可以一次性处理的数是否为质数。
优化
若为素数, 且有是小于正整数, 那么就在之前被的某个质因数已经置为不是了。所以我们其实只需要从开始往后更新的倍数就就行了
代码:
2|3法三:线性筛
这种筛法是在埃拉托斯特尼筛法的基础上改进而来的。 埃拉托斯特尼筛法就算经过优化也可能会把一个数重复筛多次。 根据某个公理, 我们知道, 任意一个集合都有一个最小值与一个最大值, 所以每个数的质因数都有一个最小值, 如果我们每次筛数都只用这个数的最小质因数, 就可以将时间复杂度降到线性。每当我们循环到任意一个数, 就将其质数倍给筛掉, 直到出现质数是n的因数时, 就跳出筛素数的循环, 因为一定能被筛掉。
代码:
3|0方法分析
第一种方法
速度慢, 不过占用空间极小, 且在不超过范围的情况下只用两个变量, 适用于卡空间的题
第二种方法
速度中等, 空间中等, 而且与第三种的空间差不多, 一般来说只要会第三种基本不用这一种方法, 比较鸡肋。
第三种方法
空间占用较多, 不过时间非常快, 与第二种方法都可以一次性处理[1, n]之间的所有情况, 比较常用。
3|1综上所述
题目中决定使用方法的就是数据范围, 在每个阶段的所开数组范围中都有不同的方法,只是第二种方法一般来说只用于知识点不够的情况下。
__EOF__

本文链接:https://www.cnblogs.com/flower-dream/p/prime_number.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!