如果给定一个区间范围,有几种方法可以计算出该区间内的素数呢?
——有四种方法!
在介绍方法之前,先了解一下下面这个函数。
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所用时间最少。