Python中的Prime Sieve算法:帮助解释

时间:2017-12-01 20:28:19

标签: python python-3.x primes enumerate sieve

我使用我隐约明白的枚举函数来看到这个主筛,我理解了代码背后的一般思想,即将所有非素数值转换为' True'错误'错误'然后从中创建一个主要列表。但是我不确定如何解释第5行之后的代码,is_prime是函数还是变量?我有点困惑

def prime_sieve(n):
    sieve = [True] * n #Generates a list of 'True' of length n
    sieve[:2] = [False, False]  #  0 and 1 are not primes
    primes = []
    for prime, is_prime in enumerate(sieve): 
        if not is_prime:
            continue
        primes.append(prime)
        for not_prime in range(prime*prime, n, prime):
            sieve[not_prime] = False 
    return primes, sieve

3 个答案:

答案 0 :(得分:2)

def prime_sieve(n):
    sieve = [True] * n #Generates a list of 'True' of length n
    sieve[:2] = [False, False]  #  0 and 1 are not primes
    primes = []

声明函数,设置变量。 Sieve是一个布尔值列表,用于表示给定指数的数量是否为素数。 Primes设置为到目前为止找到的空列表。

    for prime, is_prime in enumerate(sieve): 

迭代所有数字的枚举列表,以及它们的布尔对应物。枚举就像迭代列表,但也有所有列表变量的索引。由于enumerate为每个列表元素提供了两个变量,因此需要使用两个变量来解压缩它。 '黄金'将是一个数字,正在访问的列表元素的索引,' is_prime'是该索引的布尔值。

        if not is_prime:
            continue

如果之前已声明某个号码不是素数,则跳过它。

primes.append(prime)

如果没有,请将其添加到已找到的素数列表中。

        for not_prime in range(prime*prime, n, prime):
            sieve[not_prime] = False 

从素数广场开始到最后,所有可被素数整除的数字都设为False

 return primes, sieve

返回所有素数的列表,以及筛子中所有数字的布尔列表。

答案 1 :(得分:1)

试试这个:

var module = new Module(
    (object sender, Args a) => { return something; }
)

你现在明白了吗?

答案 2 :(得分:1)

如果is_prime是一个函数,则它不会是False,因此无论not is_prime是什么,False总是会返回is_prime。请注意,函数和函数返回之间存在差异;如果is_prime是一个函数,则is_prime()将是is_prime()返回的内容,可以是False,但is_prime将是函数对象本身,这是不是False。一个函数可以返回 False,但它不能 False