Python 2.7 Python';有什么比素数列表更快的选择?

Python 2.7 Python';有什么比素数列表更快的选择?,python-2.7,list,primes,Python 2.7,List,Primes,我需要找到指定范围内的第一对素数,这些素数之间必须有一定的差异,并且在这个差异内没有其他素数。 我的代码似乎工作正常,但速度非常慢——我想这是因为我使用列表来处理素数。什么是更好的方法 g=difference; n=first number in range m= second number in range def gap(g,n,m): prime_list = [] for num in range(n,m+1): if all(num%i!=0 f

我需要找到指定范围内的第一对素数,这些素数之间必须有一定的差异,并且在这个差异内没有其他素数。 我的代码似乎工作正常,但速度非常慢——我想这是因为我使用列表来处理素数。什么是更好的方法

g=difference;
n=first number in range
m= second number in range

def gap(g,n,m):

    prime_list = []
    for num in range(n,m+1):
         if all(num%i!=0 for i in range(2,int(num**0.5)+1)):
                prime_list.append(num)

    if len(prime_list)<1:
        return None

    for pnum in prime_list:
        for index in range(len(prime_list)):
            pnum2 = prime_list[index]
            diff = abs(pnum - pnum2)

            if diff == g:

                checker = abs(prime_list.index(pnum2) - prime_list.index(pnum))
                if checker <=1:
                   return [pnum, pnum2]

Some tests:
    Test.assert_equals(gap(2,100,110), [101, 103])
    Test.assert_equals(gap(4,100,110), [103, 107])
    Test.assert_equals(gap(2, 10000000, 11000000), [10000139, 10000141])
g=差异;
n=范围内的第一个数字
m=范围内的第二个数字
def间隙(g、n、m):
prime_list=[]
对于范围(n,m+1)中的num:
如果范围(2,int(num**0.5)+1)中的所有(num%i!=0表示i):
prime_list.append(num)

如果len(prime_list)为什么要将prime存储在
列表中?你只需要一次记住一个。您将按升序处理它们,正如jasonharper指出的,当您遇到连续素数之间等于
g
的第一个增量时,您需要做的就是停止:

def gap(g, n, m):
    previous_prime = None
    for candidate in range(n, m + 1):
        if all(candidate % factor for factor in range(2, int(candidate ** 0.5) + 1)):
            if previous_prime is not None and candidate - previous_prime == g:
                return [previous_prime, candidate]
            previous_prime = candidate

在素数列表上有两个嵌套循环,这使得效率极低。循环一次,然后检查下一个数字是否与g完全不同。非常感谢,这非常有效!我猜我被困在我的“分解成小步骤”太多了。非常感谢,我花了好几个小时在这段代码战的代码上。