所以我可以用更简单的方式做到这一点,但是我正在练习涉及列表的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)
答案 0 :(得分:0)
你的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
答案 1 :(得分:0)
尝试此操作时,使用大数字时,效率是代码的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))
答案 2 :(得分:0)
请参阅Sieve of Eratosthenes - Finding Primes Python
Eratosthenes的Sieve是一种更快找到素数的方法。
this似乎是在Python中查找素数的最快解决方案。此页面上还有许多其他示例,用于实现查找素数的函数的不同方法,尽管这些示例都没有创建第二个is_prime函数,而是将其作为练习让您弄清楚。