打印范围之间的素数。 Eratosthenes的筛子

时间:2017-05-28 14:24:53

标签: python

我已将从x到y(包括)的所有数字都附加到list1中。我现在只需要列表只包含从x到y的素数

def primes(x , y):
    list1 = []
    for i in range(m, n + 1):
            list1.append(i)
    for elements in list1:
            if elements % 2 == 0:
                    pos = list1.index(elements)
                    list1.pop(pos)
    return list1

我已经将所有数字从x到y(包括)附加到list1中,并且还摆脱了偶数但我似乎无法摆脱其他不是素数的数字。我现在只需要列表只包含从x到y的素数

例如x = 7,y = 23

list1 = [7,11,13,17,19,23]

提前致谢

1 个答案:

答案 0 :(得分:1)

这里有一些提示:您不需要生成x和y之间的整数整数列表,然后删除非素数列表。一种更快的方法是生成小于y的所有素数,然后删除小于x的素数。这样,您可以使用先前计算的素数来有效地检查数字是否为素数。

所以,让我们从头开始吧。 2是唯一的偶数素数。所以你可以从2开始并迭代奇数直到y。如果数字不能被任何先前的素数整除,则该数字将是素数。

对于介于0和y之间的每个数字,首先假设它是素数。你检查它是否可以被前面的素数整除。如果它是任何素数的倍数,那么你可以停止(break),因为你知道它不是素数。如果它不是任何先前素数的倍数,则将其添加到素数列表中。

最后,如果您的素数列表在0和y之间,则删除小于x的元素。

Python中提供的内容:

def primes(x , y):
    l = [2] # list of prime numbers
    for n in range(3,y+1,2): # iterations over odd numbers
        isprime = True
        for e in l:
            if n % e == 0:
                isprime = False
                break
        if(isprime):
            l.append(n)

    return [e for e in l if e >= x]

print(primes(7,23))
# [7, 11, 13, 17, 19, 23]