我正在玩Python shell,我相信這是一個非常天真的函數實現,它只是返回100個隨機生成數字列表中的第一個素數(其值在0和99之間,包括在內)。下面的代碼:在隨機數字列表中獲得第一個素數
>>> def is_prime(n):
if n < 2:
return False
elif n == 2:
return True
for i in range(2, n):
if n % i == 0:
return False
return True
>>> from random import randint
>>> numbers = []
>>> for i in range(0, 100):
numbers.append(randint(0, 99))
>>> def get_first_prime(values):
temp = []
for i in values:
if is_prime(i):
temp.append(i)
return temp[0]
>>> get_first_prime(numbers)
我想這個函數返回嚴格只的第一素數。我的實現使用助手列表來緩存所有素數,然後簡單地返回第一個索引處的元素。它有效,但我不相信這是一個很好的。我確信有一個更有效的方法可以做到這一點,不需要掃描整個列表,但我似乎還沒有想到。
有什麼更好的選擇?
只是一個小建議:當檢查可分性來測試可疑的素數時,不需要檢查比sqrt(n)更高的數字。通過這種修改,''is_prime(n)''函數中的''for''看起來就像''在範圍內(2,int(sqrt(n))):...''(和你將需要''從數學導入sqrt''來獲得''sqrt()''功能可用)。 – zegkljan
相關:[檢查數字是否爲最佳的最佳算法是什麼?](http://stackoverflow.com/q/1801391/4279) – jfs