【发布时间】:2016-08-19 18:17:15
【问题描述】:
我在玩 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看起来像for i in range(2, int(sqrt(n))): ...(您需要from math import sqrt才能获得sqrt()函数可用)。
标签: python python-3.x primes