求一個區間內的素數

如果給定一個區間範圍,有幾種方法可以計算出該區間內的素數呢?
——有四種方法!
在介紹方法之前,先了解一下下面這個函數。

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所用時間最少。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章