Guest User

Untitled

a guest
Feb 24th, 2018
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.29 KB | None | 0 0
  1. #!/bin/env python3
  2.  
  3. import time
  4. import math
  5.  
  6. """
  7. https://projecteuler.net/problem=357
  8.  
  9. """
  10.  
  11. start = time.time()
  12.  
  13.  
  14. def primes(ubound=10**5):
  15. """ Generating prime numbers LIST
  16. https://stackoverflow.com/a/8627193/1770460
  17. """
  18. size = (ubound - 3) // 2
  19. a = [False] * size
  20. s = 0
  21. primes = []
  22. while s < size:
  23. t = 2 * s
  24. p = t + 3
  25. primes.append(p)
  26. for n in range(t * (s + 3) + 3, size, p):
  27. a[n] = True
  28. s = s + 1
  29. while s < size and a[s]:
  30. s = s + 1
  31. return primes
  32.  
  33. the_primes = primes()
  34.  
  35. def number_divisors(max_limit=10**5):
  36. """ Find the divisors of every number.
  37. Return it in a dict in the format:
  38. { number1: [divisor1, divisor2 ... ], .. }
  39. """
  40. num_divs = {}
  41. for i in range(4, max_limit):
  42. if i in the_primes:
  43. continue
  44. else:
  45. sq = math.sqrt(i)
  46. for n in range(2, int(sq) + 1):
  47. if i not in num_divs:
  48. num_divs[i] = [1]
  49. if i % n == 0:
  50. if n == i / n:
  51. num_divs[i].append(n)
  52. else:
  53. num_divs[i].extend((n, i / n))
  54. return num_divs
  55.  
  56.  
  57.  
  58. def find_count(d):
  59. """ Check every number whether the divisors i.e. d + number / d is
  60. prime.
  61. """
  62. assert d is not None
  63.  
  64. count = 0
  65. for number, list_divisors in d.items():
  66. all_primes = True
  67. for each_div in list_divisors:
  68. val = (each_div + (number / each_div))
  69. if val not in the_primes:
  70. all_primes = False
  71. break
  72. if all_primes:
  73. count += 1
  74. return count
  75.  
  76.  
  77.  
  78.  
  79. if __name__ == '__main__':
  80.  
  81. num_divisors = number_divisors()
  82. print(find_count(num_divisors))
  83.  
  84. elapsed_time = (time.time() - start)
  85. print('time elapsed %s sec.' % elapsed_time)
  86.  
  87. the_primes = set(primes())
  88.  
  89. def primes(ubound=10**5):
  90. """ Generating prime numbers https://stackoverflow.com/a/8627193/1770460 """
  91. size = (ubound - 3) // 2
  92. a = [False] * size
  93. s = 0
  94. while s < size:
  95. t = 2 * s
  96. p = t + 3
  97. yield p
  98. for n in range(t * (s + 3) + 3, size, p):
  99. a[n] = True
  100. s = s + 1
  101. while s < size and a[s]:
  102. s = s + 1
Add Comment
Please, Sign In to add comment