找素数 ——第二次个人项目报告

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了找素数 ——第二次个人项目报告相关的知识,希望对你有一定的参考价值。

  1. 首先采用了最朴素的埃拉托色尼筛法,求第一亿个素数的用时大概在40秒左右。
  2. 查阅了关于高速缓存的知识后,将数组开成100000大小,反复覆盖重用,求第一亿个素数的用时变为20秒左右。
  3. 后将数组开成2*3*5*7*11*13大小后,先人为去除2,3,5,7,11,13倍数的数,再进行筛法,用时大概在13秒左右。
  4. 另开一个数组,存放需要判断的下一个数的值。比如b[1]=17;b[17]=19…省去了需要不停重复初始化筛的时间,用时大概在10秒左右。
  5. 找到一个素数后,只筛去奇数倍的值,因为偶数倍的已经被2筛过了,用时大概变为7秒左右。

附截图

注:在网上找到了一个求f(x)的数论解,f(x)表示在1到x之间的素数个数,时间复杂度为O(1),此时再采用二分查找法,可以在大概4秒钟的时间内找到第一个素数,但因实在无法理解该数论方法,因此并没有采用这种方法。

源程序代码:https://github.com/zj140/prime/blob/master/prime.cpp

 

以上是关于找素数 ——第二次个人项目报告的主要内容,如果未能解决你的问题,请参考以下文章

软件工程(2018)第二次个人作业

西北师大-18软工第二次作业成绩汇总

2018-2019-2 20175310 个人项目报告2--完全数

第二阶段个人总结1(5.25)

第二周作业二每周例行报告

2019春第二次课程设计实验报告