我正在尝试创建一个程序,检查该数字是否为素数。我的想法是使用函数,该数字的平方根除以平方根之前的所有数字,定义数字是否为素数。 (我希望你理解)
无论如何,我正试图找到一种方法来对我列表中的每个字符使用模数。作为一个例子
Prime % List(2,sqrtPrime) =/ 0 #I know this doesnt work, just a hint how i want it to work.
如果我运行这个错误是因为我不能在列表上使用模数,那么我该怎么做呢? 而且,这个想法是否会贯穿2-sqrtPrime的每一个角色?
由于
答案 0 :(得分:1)
对我来说最好的方式看起来像是:
rng = xrange(2, int(math.sqrt(n)) + 1)
is_prime = all(n % i for i in rng)
要点是:
rng
是一个生成器,而不是列表(...)
中的表达式也是一个生成器,因此不会创建不必要的中间列表all
将停止迭代,因此没有额外的迭代答案 1 :(得分:0)
如果参数为Prime,则可以编写一个返回True
的函数,否则False
,然后在列表中运行filter
。
import math
def isPrime(x):
for factor in range(2,math.floor(x**0.5)+1):
if x % factor == 0:
# x divides evenly, so
return False
return True
lst = [some, numbers, go, here]
primes_in_lst = filter(isPrime, lst)
或者,如果您反对filter
作为规则(有些人认为它是unpythonic),那么您可以将它放在列表中。
primes_in_lst = [num for num in lst if isPrime(num)] # exactly equivalent
从技术上讲,isPrime
功能可以是lambda
:
primes_in_lst = filter(lambda x: all(x%factor for factor in range(2,math.floor(x**0.5)+1)), lst)
但是jeebus很难看。