[英]Python prime number function populating list
所以我可以用一種更簡單的方法來做到這一點,但是我正在使用涉及列表的Pure Functions進行練習,因此無法正常工作。 我知道我在欺騙並使其變得不精確,因為它沒有提到諸如排除1之類的事情,並且僅通過列表奇數來節省處理時間,但這不是我的重點。 指針?
def is_prime(n):
for i in range(2, n+1):
if n % i == 0:
return False
return True
def listprimes_upto(n):
result = []
for i in range(2, n):
if is_prime(i):
result.append(i)
return result
print(listprimes_upto(50))
(這是較簡單的非列表版本,可以正常運行):
def listprimesupto(n):
for p in range(2, n+1):
for i in range(2, p):
if p % i ==0:
break
else:
print(p)
listprimesupto(50)
您的is_prime錯誤。 您必須使用range(2,n)
,否則將始終從該函數獲得False
。 因為,顯然,范圍中的最后一個i
將為n
和n % i == 0
。
def is_prime(n):
# vvv n here, not n+1
for i in range(2, n):
if n % i == 0:
return False
return True
嘗試使用此方法,效率比使用大數字時的代碼高10倍。
def is_prime(n):
for i in range(2, int(n**0.5)+1):
if n % i == 0:
return False
return True
def listprimes_upto(n):
result = []
for i in range(2, n):
if is_prime(i):
result.append(i)
return result
print(listprimes_upto(50))
參見Eratosthenes篩-查找Primes Python
Eratosthenes篩網是找到質數的更快方法。
這似乎是在Python中查找質數的最快解決方案。 本頁上還有許多其他示例,這些示例以不同的方式實現函數以查找質數,盡管這些示例均未創建第二個is_prime函數,但您可以自己練習。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.