列表上的模数,可行吗?

时间:2014-09-11 16:17:54

标签: python modulus

我正在尝试创建一个程序,检查该数字是否为素数。我的想法是使用函数,该数字的平方根除以平方根之前的所有数字,定义数字是否为素数。 (我希望你理解)

无论如何,我正试图找到一种方法来对我列表中的每个字符使用模数。作为一个例子

Prime % List(2,sqrtPrime) =/ 0 #I know this doesnt work, just a hint how i want it to work.

如果我运行这个错误是因为我不能在列表上使用模数,那么我该怎么做呢? 而且,这个想法是否会贯穿2-sqrtPrime的每一个角色?

由于

2 个答案:

答案 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很难看。