如果給定一個區間範圍,有幾種方法可以計算出該區間內的素數呢?
——有四種方法!
在介紹方法之前,先了解一下下面這個函數。
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所用時間最少。