#include<bits/stdc++.h>
using namespace std;
const int N = 100001;
bool st[N];
int prime[N],cnt;

朴素法

void get_prime(int n ){for(int i = 2;i <= n;i++){if(!st[i]){prime[++cnt] = i;}// 从 i+i 开始筛 , 2-n的所有数的倍数都筛掉,其实是不用的。for(int j = i + i;j <= n;j += i){st[j] = 1;}}
}
时间复杂度 O(nlogn)O(nlogn)O(nlogn)

n+n/2+....n/n=n(1+1/2+1/3+1/4+1/5+...+1/n)n + n/2 +.... n/n = n(1 + 1/2 + 1/3 + 1/4 + 1/5 + ... + 1/n)n+n/2+....n/n=n(1+1/2+1/3+1/4+1/5+...+1/n)

筛倍法

void get_prime2(int n ){for(int i = 2;i <= n;i++){if(!st[i]){prime[++cnt] = i;// 就比如 i = 2,就已经筛了它的倍数,就不需要筛 4的倍数 for(int j = i + i;j <= n;j += i){st[j] = 1;}}}
}
时间复杂度 O(nloglogn)O(nloglogn)O(nloglogn)

线性法

void get_prime3(int n){for(int i = 2;i <= n;++i){// 如果不是素数,则 if(!st[i]){prime[cnt++] = i;}for(int j = 0;prime[j] <= n / i;++j){// 例如6是2的倍数,则6就被筛掉,而不会因为3被再筛一次,因此每一个元素都被访问一次st[prime[j] * i] = true;if(i % prime[j] == 0) break;}}
}
时间复杂度 O(n)O(n)O(n)
int main(){int N = 100;get_prime3(N);for(int i = 0;i < cnt;i++){cout << prime[i] << " "; }return 0;
}

常见三种求素数的方法相关推荐

  1. 整数n分解成素数乘积c语言,关于几种求素数的方法(C语言描述)

    求出3到50w范围内所有的素数. 这类问题在C语言题目中经常会遇见.同样,大素数的研究对于密码学也起到了重要的作用.那么对于C语言的初学者,该如何编写程序计算素数呢? 1. 首先从素数的定义来看,&q ...

  2. 计算机换用户无法启动软件吗,电脑软件无法启动常见的三种原因以及解决方法...

    日常生活中,我们的电脑总会遇到各种各样的问题,掌握了修电脑的技能,会对我们有很大的帮助,至少出现问题的时候不会手忙脚乱,打乱我们的工作计划,或者花冤枉钱拿出去修,下面就给大家简单讲述电脑软件无法启动常 ...

  3. 计算机无法启动的原因及解决方法,电脑软件无法启动常见的三种原因以及解决方法...

    日常生活中,我们的电脑总会遇到各种各样的问题,掌握了修电脑的技能,会对我们有很大的帮助,至少出现问题的时候不会手忙脚乱,打乱我们的工作计划,或者花冤枉钱拿出去修,下面就给大家简单讲述电脑软件无法启动常 ...

  4. 对象转数组的方法(常见三种)

    对象转数组的方法(常见三种) Object.values(obj) //属性值 Object.keys(obj) //属性名 Object.entries(obj) //属性名和属性值

  5. 求素数的方法完整归纳,学的不仅是“求素数”!

    一.相关概念 定义:素数(Prime Number)又称质数,是指大于1且只能被1和它本身整除的正整数,例如2,3,5,7,11等. 与素数相对的就是合数,它能被一个本身之外的数整除,例如4,6,8, ...

  6. 约束优化:约束优化的三种序列无约束优化方法

    文章目录 约束优化:约束优化的三种序列无约束优化方法 外点罚函数法 L2-罚函数法:非精确算法 对于等式约束 对于不等式约束 L1-罚函数法:精确算法 内点罚函数法:障碍函数法 等式约束优化问题的拉格 ...

  7. 常见三种陷波滤波器(Notch Filter)的离散化设计

    为了学习陷波器,几乎把全网的陷波器有关文章都看了一遍,整理下,加深印象,也给后来的朋友作参考,文章内容大部分直接复制过来,但是所有内容代码我都测试了一遍,其中有些错误之处,也作了修改. 陷波滤波器形式 ...

  8. 三种权重的初始化方法

    总结了三种权重的初始化方法,前两种比较常见,后一种是最新的. 1. Gaussian Weights are randomly drawn from Gaussian distributions wi ...

  9. 常见三种存储方式DAS、NAS、SAN的架构及比较

    随着主机.磁盘.网络等技术的发展,数据存储的方式和架构也在一直不停改变,本文主要介绍目前主流的存储架构. 存储的分类 根据服务器类型分为: 封闭系统的存储(封闭系统主要指大型机) 开放系统的存储(开放 ...

最新文章

  1. window mysql 字符集_Windows mysql默认字符集修改
  2. mysql4中出现的本地计算机 无法启动mysql服务 错误1067解决办法
  3. 105. Leetcode 121. 买卖股票的最佳时机 (动态规划-股票交易)
  4. Python中的正则表达式(分组)
  5. 兼容IE和FF的js脚本做法(比较常用)[问题点数:20分]
  6. android用qq浏览器打开微信网页版,QQ浏览器怎么打开微信小程序?
  7. C语言指针、数组与sizeof运算符
  8. Java方法中的参数太多,第5部分:方法命名
  9. java jar包 配置文件_java 导入jar包中配置文件
  10. 【Spring】jpa数据库表实体命名规则 Unknown column ‘user0_.create_time‘ in ‘field list‘
  11. Python字典中 get() 函数的使用
  12. Django:ORM基本操作-CRUD,管理器对象objects,----->查询1(all,values,values_list,order_by)
  13. 表达式求值(nyoj305)
  14. Nginx-windows
  15. python画3d图-Python绘制3D图形
  16. Unix中使用MeteoInfo - Xmanager设置
  17. python的Singleton模式实现
  18. IBM 亮相HIMSS 2010 亚太区博览会
  19. 音频文件压缩大小如何操作?分享一个音频压缩的小技巧
  20. Windows xp 定时关机命令 [转贴]

热门文章

  1. C语言 输出一个字符
  2. 养成前端、后端Debug的良好习惯
  3. 用Unity重现《空洞骑士》的苦痛之路(3)——地图篇
  4. 安全狗受邀亮相第二届工控中国大会
  5. Linux学习路线图及常逛自学网站推荐
  6. 如何使用Kubernetes管理中国高速公路上的10万边缘节点?
  7. 案例 | 信安运维基于 TKE 平台的容器技术实践
  8. Android逆向 学习Android安全和逆向开发的路线总结,啃下这些Framework技术笔记
  9. 一篇超详细的vue项目前端自动化测试教学!
  10. C++的成长之路(02)