找到大于10 ^ 12的素数

时间:2013-12-26 08:34:17

标签: python algorithm optimization primes

1,000,000,000,000和1,000,000,100,000之间的所有素数之和是多少? 这很好但很慢。我需要优化它。我是python的新手。 3614000181007876 是正确答案

    A=10 ** 6
N=A+1
B=10 ** 5
prime=[]
sum=0
for i in range(0,N):
    prime.append(0)
for i in range(2,N):
    if(prime[i]==1):
        continue
    for j in range(i*i,N,i):
        prime[j]=1
for i in range((A ** 2)+1,(A ** 2)+B,2):
    for j in range(2,A):
        c=0
        if(prime[j]==1):
            continue
        if(i%j==0):
            c=c+1
            if(c>0):
                break
    if(c==0):
        #print(i)
        sum=sum+i


print(sum)

1 个答案:

答案 0 :(得分:5)

不是最有效的方式,但在我的盒子上2秒内得到正确的结果(希望3614000181007876):

def isPrime(n):
    d = n - 1
    s = 0
    while not d & 1:
        s += 1
        d >>= 1
    for a in (2, 13, 23, 1662803):
        if pow(a, d, n) != 1 and all(pow(a, (1 << r) * d, n) != n - 1 for r in range(0, s)):
            return False
    return True

print(sum(x for x in range(1000000000001, 1000000100000, 2) if isPrime(x)))