簡體   English   中英

Python素數函數填充列表

[英]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將為nn % 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM