2013-12-26 2 views
2

Какова сумма всех простых чисел от 1 000 000 000 000 до 1 000 000 100 000? это работает, но очень медленно. Мне нужно его оптимизировать. Я новичок в python. правильный ответнахождение простых чисел больше 10^12

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) 
+3

Возможные дублей ... HTTP : //stackoverflow.com/questions/10703699/program-to-find-all-primes-in-a-very-large-given-range-of-integers – bgamlath

+1

google "сито из эратосфенов" – Vorsprung

+2

кажется актуальным: http://stackoverflow.com/questions/2068372/fastest-way-to-list-all-primes-below-n-in-python – Paul

ответ

5

Не самый эффективный способ, но получает правильный результат (надеюсь 3614000181007876) в течение 2 секунд на моей коробке:

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))) 
+0

это быстро .... может у объяснить мне ур путь – user3131880

+0

Это просто детерминированный Миллер-Рабин-Тест: http://en.wikipedia.org/wiki/Miller-Rabin_primality_test – Hyperboreus

Смежные вопросы