素数总结

一.素数的定义

  • 对于一个大于等于2的正整数n,如果从2,3,…n-1都没有一个数能够整除n,则n为素数

二.素数的判断

bool isPrime(int n) {if(n == 1) {return false;}for(int i=2; i<n; i++) {if(n%i == 0) {return false;}}return true;
}

由数学知识可知,我们并不需要遍历到n-1才截止,只需要遍历到根号n即可

当遍历到根号n都没有一个整除的数,之后肯定是没有的,所以可以进行一个小优化

bool isPrime(int n) {if(n == 1) {return false;}for(int i=2; i<sqrt(n); i++) {if(n%i == 0) {return false;}}return true;
}

三.素数表的获取

在有些算法题中,需要用到素数表,因此我们需要学会素数表的快速获取

1.普通方法(暴力)

//素数表,以及素数个数
int prime[n], pNum = 0;
bool isPrime(int n) {if(n == 1) {return false;}for(int i=2; i<sqrt(n); i++) {if(n%i == 0) {return false;}}return true;
}
void Fine_Prime() {for(int i=1; i<n; i++) {if(isPrime(i) == true) {prime[pNum++] = i;}}
}
  • 暴力方法在普通情况下是可以的,但当n较大的时候,时间复杂度会比较大

2.Eratosthenes筛法(埃氏筛法)

基本思路:使用一个标记筛除数组。每当得到一个素数后,将从该数到n之内该数的倍数筛掉

int prime[n], pNum = 0;
//标记数组,初始化false。当为非素数的时候设为true,表示被筛掉
bool p[n] = {true};
void Fine_Prime() {for(int i=2; i<n; i++) {if(p[i]==false) {prime[pNum++] = i;for(int j=i+i; j<n; j+=i) {p[j] = true;}}}
}

注意,埃氏筛法是不需要调用isPrime()函数去判断的。他是将一个一个数逐步筛除,而不是判断标记

可以发现,筛法比非筛法的代码其实更短,而且更高效

素数总结(包含素数表)相关推荐

  1. python找出素数_python找素数

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 注意:对正整数n,如果用2到n的平方根之间的所有整数去除,均无法整除,则n为质数 ...

  2. 普通素数 筛法求素数 二次筛法求素数 MillerRabin素数测试【模板】

    素数和合数共同的性质: 1.a > 1是合数,当且仅当a = b * c,其中1 < b < a,1 < c < a. 2.合数必有素数因子. 3.如果d > 1, ...

  3. 素数:素数判断、找素数、计算素数和、素数求和

    有关素数的基础算法 素数测试 package 素数;import java.util.ArrayList; import java.util.HashMap; import java.util.Map ...

  4. 如何找到与证明素数之一:小素数和概率素数的快速检验

    如何找到与证明素数之一:小素数和概率素数的快速检验 引言 一.寻找十分小的素数 二.费马数,概率素数和伪素数 三.强概率素性检验 引言 在前一篇文章中,我们对如何寻找素数给出了三类方法,本文则详细讨论 ...

  5. python输出超级素数_超级素数(sprime)

    超级素数(sprime) 题目描述 超级素数是指一个素数,每去掉后面一个数字,总能保证剩下的数为质数,例如: 373->37->3 这是一个长为3的超级素数. 输入 输入一个整数n (10 ...

  6. c语言判断2 1000素数,2是不是素数(C语言判断一个数为素数)

    我听说西方不承认2是质数,而中国承认 到底是不是真的 2是质数.质数又称素数.一个大于1的自然数,除了1和它自身外,不能整除其他自然数的数叫做质数:否则称为合数.2是一个大于1的自然数,这一点满足质数 ...

  7. Java黑皮书课后题第6章:**6.29(双素数)双素数是指一对差值为2的素数。例如,3和5就是一对双素数,5和7是一对双素数,而11和13也是一对双素数。编写程序,找出小于1000的所有双素数

    6.29(双素数)双素数是指一对差值为2的素数.例如,3和5就是一对双素数,5和7是一对双素数,而11和13也是一对双素数.编写程序,找出小于1000的所有双素数 题目 题目描述 破题 代码 运行示例 ...

  8. Java黑皮书课后题第6章:**6.27(反素数)反素数(反转拼写的素数)是指一个非回文素数,将其反转之后也是一个素数。编写程序,显示前100个反素数,每行显示10个,并且数字间用空格隔开

    6.27(反素数)反素数(反转拼写的素数)是指一个非回文素数,将其反转之后也是一个素数.编写程序,显示前100个反素数,每行显示10个,并且数字间用空格隔开 题目 题目描述 破题 代码 题目 题目描述 ...

  9. 财务报表包含哪些表?是季报还是月报?

    财务报表包含哪些表? 财务报表包括资产负债表.损益表.现金流量表或财务状况变动表.附表和附注.财务报表是财务报告的主要部分,不包括董事报告.管理分析及财务情况说明书等列入财务报告或年度报告的资料. 财 ...

  10. 【javascript输入一个数判断这个数是否为素数】判断素数

    判断素数 什么是素数:素数是指质数,一个大于1的自然数,除了1和它自身外,不能整除其他自然数的数叫做质数:否则称为合数.所以我们可以利用这个性质来判断这个数是否为素数. 基本代码: css部分: .b ...

最新文章

  1. 用技嘉Windows Image Tool给原版WIN7镜像注入USB3.0驱动
  2. MySQL如何跨机器迁移数据?
  3. MySQL运维常用系统命令
  4. wap打包 本地化 hbuilder_秋收接近尾声 冰城开启秸秆打包、秋整地
  5. 删除行对MySQL序列有这么多影响?
  6. 【ASP.NET】ASP.NET如何发布Web项目
  7. 基于vue-cli的快速开发框架
  8. myeclipse激活+Aptana安装配置
  9. Atitit 传媒学院专业与课程表艾提拉总结 目录 1. 媒体分为感觉媒体、表示媒体、表现媒体、存储媒体和传输媒体 1 1.1. 1、感觉媒体 如文字、数据、声音、图形、图像等。 1 1.2. 表示
  10. 计算机专业能当电子厂技术员,我在一个机械工厂从事电气技术员的工作,谁能告诉..._电气工程师_帮考网...
  11. Python xlsx转xls xls文件修复
  12. ios中获得UUID的方法,ios怎么获得uuid
  13. 2019.05 随笔
  14. 2017 ACM - ICPC Asia Ho Chi Minh City Regional Contest
  15. Problem K: 三角形数
  16. APP定制开发的优势
  17. B. Ternary Sequence
  18. 【量子力学】国际象棋与量子国际象棋Quantum Chess游戏规则
  19. [转贴]当杀毒软件无能为力时,手动杀毒也许是我的最后救命稻草!
  20. 给CheckBox换样式

热门文章

  1. Latex的使用(Ctex+TeXstudio)
  2. 简单聊一聊中国的房地产
  3. HadoopSpark
  4. UniAPP Android 蓝牙 ESCPOS打印机 打印图片和二维码
  5. 千克与磅之间的转换 Exercise05_05
  6. [git] your branch is ahead of ... 解决办法
  7. 郑州73中学计算机老师,2019年关于“郑州市中学信息技术优质课评比”的通知
  8. mysql关系运算选择投影连接,[转载]选择、投影和连接运算(关系数据库)
  9. 重磅!阿里又推免费商用字:阿里巴巴普惠体
  10. ActiveX控件的注册和反注册