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

  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

时间: 10-17

找素数 ——第二次个人项目报告的相关文章

【百度之星2014~初赛(第二轮)解题报告】Chess

声明 笔者最近意外的发现 笔者的个人网站http://tiankonguse.com/ 的很多文章被其它网站转载,但是转载时未声明文章来源或参考自 http://tiankonguse.com/ 网站,因此,笔者添加此条声明. 郑重声明:这篇记录<[百度之星2014~初赛(第二轮)解题报告]Chess>转载自 http://tiankonguse.com/ 的这条记录:http://tiankonguse.com/record/record.php?id=667 前言 最近要毕业了,有半年没做

2016012002+小学四则运算练习软件项目报告

项目报告目录: 一.感想 二.需求分析 三.功能设计 四.设计实现 五.算法详解 六.测试运行 七.总结反思 八.PSP展示 代码仓库地址:https://git.coding.net/Vsmile1997/symx.git测试效果见src下生成的result.txt文件 一.感想 我把感想写在第一部分,是想首先谈谈完成这个项目的体验和感悟.重新梳理程序的代码思路,满满的完成任务的成就感和如释重负的轻松感. 从拿到作业的起初,我把问题过度放大了.Java?我还要重新拿起那本大厚书学习Java?出

2016012045 +小学四则运算联系项目报告

  2016012045 +x小学四则运算联系项目报告 代码仓库地址:https://git.coding.net/Enther/operation.git 一.需求分析. 此项目主要是为面向小学生的小学数学四则运算练习所用,所以归纳出以下几点要求: (1)     对于每个数而言不能过大,且其中不涉及小数与负数,即仅考虑100内整数形式的运算. (2)     题目中最少包含两个运算符且保证不一样,且涉及加减乘除. (3)     程序中需要输入参数n作为随机产生题目数量. 二.功能设计. 此

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

2018-2019-2 20175310 个人项目报告2--完全数 定义: 如果一个数恰好等于它的因子之和,则称该数为"完全数".第一个完全数是6,第二个完全数是28,第三个完全数是496,后面的完全数还有8128.33550336等等. 需求分析: 根据完全数的定义,用Java语言进行设计实现. 设计实现: 这里我实现的是列举出1000以内所有的完全数. 伪代码如下: 1.本项目有两个循环,外部的循环i表示遍历`1-1000`的所有数 2.内部的循环`j`是用于计算数`i`除本身以外

第二次课程实验报告

2019春第二次课程设计报告 一.实验项目名称:众所周知的经典小游戏“贪吃蛇”. 二.实验项目功能描述:控制小蛇移动吃到界面中的食物,吃到食物能增长小蛇长度.但是碰到自身或墙壁会死亡. 三.项目模块结构介绍; 四.实现界面展示: 五.代码托管链接:https://gitee.com/jay101/barce 六.实验总结:自己打出来的代码还是放心点啊,书上的代码有些地方没大写导致编译错误,游戏代码打起来比做作业要有动力一点点,毕竟可以玩一下,哈哈哈. 原文地址:https://www.cnblo

面试算法题:16个数,最多用20次比较,找出第二大的数?

这道题最笨的方法就是先从16个数中选出最大的数,然后再从剩下的15个数中选出最大数就可得到答案,因此,需要15+14=29次比较. 既然这道题要求在20次比较之内就能找出第二大的数,那我们就想能简单的方法. 假设16个数中最大的是A,第二大的是B. 首先将16个数两两进行比较,较大者胜出,然后再在胜出者中进行两两比较,按此方法,最后选出最大数A,如下所示 红色路线是最大数经过的路径. 接下来分析B可能存在的位置. 将16个数分为左部分和右部分各8位: 1.如果A和B在两个不同的部分(A在左部分,

【百度之星2014~初赛(第二轮)解题报告】JZP Set

声明 笔者最近意外的发现 笔者的个人网站http://tiankonguse.com/ 的很多文章被其它网站转载,但是转载时未声明文章来源或参考自 http://tiankonguse.com/ 网站,因此,笔者添加此条声明. 郑重声明:这篇记录<[百度之星2014~初赛(第二轮)解题报告]JZP Set>转载自 http://tiankonguse.com/ 的这条记录:http://tiankonguse.com/record/record.php?id=668 前言 最近要毕业了,有半年

咖啡机器人项目报告

一.小组分工 模块 任务 责任人 备注 报告 需求分析 熊振威 功能分析 熊振威 项目报告 熊振威 人机界面 秦勤.洪超 单元测试 姜进.张文强 机器人代码 机器人类 徐意.余拥军.孙智博 机器人运动求解 徐意.余拥军.孙智博 咖啡类 徐意.余拥军.孙智博 支付功能 姜进.张文强 数据管理 姜进.张文强 二.软件功能介绍: 1.点咖啡 在此界面,用户可以选择杯型(包括大杯.中杯.小杯).种类(共三种).是否添加糖和奶以及数量,用户选择完毕后会在界面上显示所需支付的总金额,待用户确认无误后,点击下

java实验项目报告

        JAVA课程项目报告   题目:利用java实现一个时钟的小程序 姓名:王国梁 班级:计科13-2 学号:201303011200         利用JAVA实现一个时钟的小程序 1. 软件开发的需求分析 在当今的信息时代,时钟已经成为人们生活中必不可少的应用工具 ,Java语言是当今流行的网络编程语言,它具有面向对象.与平台无关.安全.多线程 等特点.使用Java语言不仅可以实现大型企业级的分布式应用系统,还能够为小型的.嵌入 式设备进行应用程序的开发.面向对象的开发方法是当