求一个区间内的素数

如果给定一个区间范围,有几种方法可以计算出该区间内的素数呢?
——有四种方法!
在介绍方法之前,先了解一下下面这个函数。

1.filter函数

filter(function, iteration)
  • filter函数用于过滤序列,过滤掉不符合条件的元素,返回一个迭代器对象,转换成列表可以用list()
  • fiter函数的功能在于将iteration的每个元素作为参数传递到function中进行判断,返货True或False。

2.输出素数方法

在进行计算之前,应该导入两个包

import math
from time import time
# method 1:直接计算
a = 2
b = 10000
t = time()
p = [p for p in range(a,b) if 0 not in [p % d for d in range(2, int(math.sqrt(p))+1)]]
print(p)
print(time() - t)
# method 2:利用filter
a = 2
b = 10000

def is_prime(x):
	return 0 not in [x % d for d in range(2, int(math.sqrt(x))+1)]

t = time()	
p = list(filter(is_prime, list(range(a, b))))
print(p)
print(time() - t)
# method 3:利用filter和lambda
a = 2
b = 10000

is_prime2 = (lambda x: 0 not in [x % d for d in range(2, int(math.sqrt(x))+1)])

t = time()
p = list(filter(is_prime2, list(range(a, b))))
print(p)
print(time() - t)
# method 4:使用定义
a = 2
b = 10000

p_list = []
for i in range(a, b):
	flag = True
	for p in p_list:
		if p > math.sqrt(i):
			break
		if  i % p == 0:
			flag = False
			break
	if flag:
		p.append(i)
print(p_list)
print(time() - t)

3.运算速度

在这里插入图片描述
根据运算结果可知,方法4所用时间最少。

发布了19 篇原创文章 · 获赞 17 · 访问量 1462

猜你喜欢

转载自blog.csdn.net/weixin_43839651/article/details/104754887