Python是素数列表的更快替代品吗?

时间:2017-01-06 17:42:05

标签: 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 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])

1 个答案:

答案 0 :(得分:0)

为什么要将素数存储在join中?你只需要一次记住一个。你将按升序顺序完成它们,正如jasonharper指出的那样,当你遇到连续素数之间的第一个等于sr.name = 'some name' df.join(sr, on='key') 的delta时,你需要做的就是停止:

list