Advertisement
Guest User

Untitled

a guest
Dec 7th, 2016
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.87 KB | None | 0 0
  1. def primeSieve (primes = None, start = 0, length = 4096):
  2. # primes = primes or [ (3, 3) ]
  3. primes = primes or []
  4. sieve = [ 0 ] * length
  5.  
  6. # Sieve known / existing primes
  7. last_prime = 3
  8. for i, (p, x) in enumerate(primes):
  9. while x < (start + length) * 2 + 1:
  10. sieve[(x - 1 - start) / 2] = 1
  11. x += p * 2
  12. primes[i] = (p, x)
  13. if p > last_prime:
  14. last_prime = p
  15.  
  16. # Apply sieve forwards until we hit length
  17. for i in range((last_prime - 1 - start) / 2, length, 1):
  18. if sieve[i] == 0:
  19. p = i * 2 + start + 1
  20. x = p
  21. while x < (start + length) * 2 + 1:
  22. sieve[(x - 1 - start) / 2] = 1
  23. x += p * 2
  24. primes += [(p, x)]
  25. return primes
  26.  
  27. def naivePrimes (N):
  28. primes = []
  29. for i in range(3, N * 2 + 1, 2):
  30. isPrime = True
  31. for p in primes:
  32. if i % p == 0:
  33. isPrime = False
  34. break
  35. if isPrime:
  36. primes += [i]
  37. return primes
  38.  
  39.  
  40. if __name__ == '__main__':
  41. SIEVE_SIZE = 60000
  42. NTH_PRIME = 10001
  43.  
  44. import time
  45. t0 = time.time()
  46.  
  47. first = lambda (a,b): a
  48. primes = map(first, primeSieve(None, 0, SIEVE_SIZE))
  49.  
  50. t1 = time.time()
  51.  
  52. print(primes)
  53.  
  54. t2 = time.time()
  55.  
  56. print("\nSIEVE:")
  57. print("Generated %d primes (first: %s, last: %s)"%(len(primes), primes[0], primes[-1]))
  58. print("Generated in %s seconds"%(t1 - t0))
  59. print("Printed in %s seconds"%(t2 - t1))
  60.  
  61. print("%dth prime is %s"%(NTH_PRIME, primes[NTH_PRIME]))
  62.  
  63. t0 = time.time()
  64.  
  65. primes2 = naivePrimes(SIEVE_SIZE)
  66.  
  67. t1 = time.time()
  68.  
  69. print("\nNAIVE:")
  70. print("Generated %d primes (first: %s, last: %s)"%(len(primes2), primes2[0], primes2[-1]))
  71. print("Generated in %s seconds"%(t1 - t0))
  72. print("%dth prime is %s"%(NTH_PRIME, primes2[NTH_PRIME]))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement