繁体   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