首页 > 代码库 > 找素数 ——第二次个人项目报告
找素数 ——第二次个人项目报告
- 首先采用了最朴素的埃拉托色尼筛法,求第一亿个素数的用时大概在40秒左右。
- 查阅了关于高速缓存的知识后,将数组开成100000大小,反复覆盖重用,求第一亿个素数的用时变为20秒左右。
- 后将数组开成2*3*5*7*11*13大小后,先人为去除2,3,5,7,11,13倍数的数,再进行筛法,用时大概在13秒左右。
- 另开一个数组,存放需要判断的下一个数的值。比如b[1]=17;b[17]=19…省去了需要不停重复初始化筛的时间,用时大概在10秒左右。
- 找到一个素数后,只筛去奇数倍的值,因为偶数倍的已经被2筛过了,用时大概变为7秒左右。
附截图
注:在网上找到了一个求f(x)的数论解,f(x)表示在1到x之间的素数个数,时间复杂度为O(1),此时再采用二分查找法,可以在大概4秒钟的时间内找到第一个素数,但因实在无法理解该数论方法,因此并没有采用这种方法。
源程序代码:https://github.com/zj140/prime/blob/master/prime.cpp
找素数 ——第二次个人项目报告
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。