fork download
  1. import math
  2.  
  3. def is_prime(n):
  4. if n < 2: return False
  5. if n == 2: return True
  6. if n % 2 == 0: return False
  7. for i in range(3, int(n/2) + 1, 2): # int(math.sqrt(num))
  8. if n % i == 0:
  9. return False
  10. return True
  11.  
  12. def sum_prime(num):
  13. if num < 2:
  14. return 0
  15. sum_p = 2
  16. prime_lis = []
  17. suspected = set(range(3, num + 1, 2))
  18. for i in range(3, int(math.sqrt(num)) + 1, 2):
  19. if is_prime(i):
  20. prime_lis.append(i)
  21. for p in prime_lis:
  22. sum_p += p
  23. suspected.difference_update(set(range(p, num + 1, p)))
  24. return sum(suspected) + sum_p
  25.  
  26. print sum_prime(2000000)
Success #stdin #stdout 1.24s 8832KB
stdin
200k: 0.09s 8.3 MB
400k: 0.19s 7.8 MB     (tests done with sqrt on line #7, so no difference!)
800k: 0.48s 8.9 MB   
2mln: 1.15s 8.0 MB   n^0.95  n^1.1  n^1.1   (empirical orders of growth compatible with `n log(log n)`)
stdout
142913828922