厄拉多塞筛法和普通方法求素数表(python实现)

时间:2022-12-21 22:21:41

厄拉多赛筛法(sieve of Eratosthenes):


想要得到一个不大于N的数所有素数,可以先找到不超过根号N的所有素数,设2 = p< p< ......<pk ≤√N,然后在2,3,4......N里面进行下面的操作:

留下p= 2,把p1的倍数全部划掉,

再留下p2 ,把p2 的倍数全部划掉,

继续这一过程,直到留下pk,把pk的倍数全部划掉,

最后留下来就是不超过N的全体素数。

举例:


N = 30   ,则取pk 为5,所以2到5的所有素数为2,3,5

第一遍 留下2,划去2的所有倍数

2   3    4   5   6   7   8   9 10

11 12 13 14 15 16 17 18 19 20

21 22 23 24 25 26 27 28 29 30

第二遍 留下3,划去3的所有倍数

2   3    4   5   6   7   8   9 10

11 12 13 14 15 16 17 18 19 20

21 22 23 24 25 26 27 28 29 30

第三遍 留下5,划去5的所有倍数

2   3    4   5   6   7   8   9 10

11 12 13 14 15 16 17 18 19 20

21 22 23 24 25 26 27 28 29 30

剩余的数就是小于等于30的所有素数,即 2,3,5,7,11,13,17,19,23,29

算法实现:


算法思想来自于上面的介绍,但是并不是严格遵循上面的步骤:

def eladuosai(n):
l = list(range(1,n+1))
l[0] = 0
for i in range(2,n+1):
if l[i-1] != 0 :
for j in range(i*2,n+1,i):
l[j-1] = 0
result = [x for x in l if x != 0]
return result

求小于等于N的所有素数的普通算法:

def sushu(n):
result = []
for x in range(2,n+1):
for y in range(2,x):
if x % y == 0:
break
else:
result.append(x)
return result

时间对比,使用timeit模块测试两个方法的时间,当取n为10000的时候有如下结论:

    t1 = timeit.Timer('sushu(10000)',setup='from __main__ import sushu')
t2 = timeit.Timer('eladuosai(10000)',setup='from __main__ import eladuosai')
print('厄拉多塞筛法的时间 ',t2.timeit(1))
print('普通函数的时间 : ',t1.timeit(1))

厄拉多塞筛法的时间 0.005523548190824634
普通方法的时间 : 0.7220688150193577

可以看出厄拉多塞筛法的运行时间比普通方法的时间要少很多。

厄拉多塞筛法和普通方法求素数表(python实现)的更多相关文章

  1. 埃氏筛法求素数&amp&semi;构造素数表求素数

    埃氏筛法求素数和构造素数表求素数是一个道理. 首先,列出从2开始的所有自然数,构造一个序列: 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 1 ...

  2. hdu 4548 筛法求素数 打表

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=4548 Problem Description 小明对数的研究比较热爱,一谈到数,脑子里就涌现出好多数的问题 ...

  3. Junit 注解 类加载器 &period;动态代理 jdbc 连接池 DButils 事务 Arraylist Linklist hashset 异常 哈希表的数据结构&comma;存储过程 Map Object String Stringbufere File类 文件过滤器&lowbar;原理分析 flush方法和close方法 序列号冲突问题

    Junit 注解 3).其它注意事项: 1).@Test运行的方法,不能有形参: 2).@Test运行的方法,不能有返回值: 3).@Test运行的方法,不能是静态方法: 4).在一个类中,可以同时定 ...

  4. python中用filter求素数

    #用filter求素数 #生成器,生成一个无限序列 def _odd_iter(): n=1 while True: n=n+2 yield n #筛选函数 def _not_divisible(n) ...

  5. python脚本5&lowbar;求素数

    #求素数 #素数:只能被1和它自己整除 n = int(input('Please input a number >>>')) flag = False for i in range ...

  6. hdu 5407 CRB and Candies(组合数&plus;最小公倍数&plus;素数表&plus;逆元)2015 Multi-University Training Contest 10

    题意: 输入n,求c(n,0)到c(n,n)的所有组合数的最小公倍数. 输入: 首行输入整数t,表示共有t组测试样例. 每组测试样例包含一个正整数n(1<=n<=1e6). 输出: 输出结 ...

  7. Algorithm --&gt&semi; 筛法求素数

    一般的线性筛法 genPrime和genPrime2是筛法求素数的两种实现,一个思路,表示方法不同而已. #include<iostream> #include<math.h> ...

  8. 第二百五十八节,Tornado框架-逻辑处理get&lpar;&rpar;方法和post&lpar;&rpar;方法,初识模板语言

    Tornado框架-逻辑处理get()方法和post()方法,初识模板语言 Tornado框架,逻辑处理里的get()方法,和post()方法 get()方法,处理get方式的请求post()方法,处 ...

  9. equals&lpar;&rpar;方法和hashCode&lpar;&rpar;方法详解

    equals()方法和hashCode()方法详解 1. Object类中equals()方法源代码如下所示: /** * Object类中的equals()方法 */ public boolean ...

随机推荐

  1. Java中的Atomic包使用指南

    Atomic包介绍 在Atomic包里一共有12个类,四种原子更新方式,分别是原子更新基本类型,原子更新数组,原子更新引用和原子更新字段.Atomic包里的类基本都是使用Unsafe实现的包装类. 原 ...

  2. css&plus;html 关于文本的总结(整理中)

    布局1:固定行数 <div> <p>示例文字示例文字示例文字示例文字</p> </div> <!-- CSS代码 --> div{ widt ...

  3. Head First-观察者模式

    什么是观察者模式?观察者模式定义了对象之间一对多的关系. 观察者模式中有主题(即可观察者)和观察者.主题用一个共同的接口来通知观察者,主题不知道观察者的细节,只知道观察者实现了主题的接口. 普遍的观察 ...

  4. Scala中的构造器和高阶函数

    构造器 在定义类时可以定义主构造器.主构造器可以同时声明字段. /** * 主构造器 * @author Administrator */ //在scala中,类和方法交织在一起 class Test ...

  5. 关于HTTP返回码301、302区别与SEO

    301(永久移动)请求的网页已永久移动到新位置.服务器返回此响应时,会自动将请求者转到新位置.您应使用此代码告诉搜索引擎Spider某个网页或网站已永久移动到新位置.建议在URL规范化的时候采用301 ...

  6. 在tomcat中加入SSL腾讯云证书的步骤

    在tomcat中加入SSL证书,可以用https方式访问域名,增加域名的安全性.当然也有很多应用要求https访问,也是安全性的考虑.阿里云和腾讯云都提供SSL证书,还有一些其他的大公司也提供,我这里 ...

  7. Numpy学习三:数组运算

    1.转置 #reshape(shape)函数改变数组形状,shape是一个元组,表示数组的形状 创建一个包含15个元素的一维数组,通过reshape函数调整数组形状为3行5列的二维数组arr = np ...

  8. react-踩坑记录——iconfont

    选取图标,添加至购物车后,下载代码. 后将下载了的文件夹改名,放入css文件夹中.在组件中使用到的时候按路径引入“iconfont.css”文件即可. 使用

  9. git 中Pull&sol;Request 的初步

    1. 目的: pull/request (简称PR) 是 项目管理者(管理者)和项目开发者(开发者)之间提交和确认工作成果的机制. 2. 流程: 开发者: 在本地创建特性分支. > git ch ...

  10. Mac版Mysql Workbench不展示Schema

    Mac版的Mysql Workbench会不展示Schema,如下图 操作如下 cd ~/Library/Application\ Support/MySQL/Workbench/ rm wb_sta ...