problem243.py 906 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. #!/usr/bin/env python
  2. from __future__ import division
  3. from math import sqrt, ceil
  4. def primes_until(n):
  5. """ Sieve of Eratosthenes """
  6. lst = [False] * n
  7. i = 2
  8. while i < n:
  9. if not lst[i]:
  10. yield i
  11. for j in xrange(i, n, i):
  12. lst[j] = True
  13. i += 1
  14. def times(a, b):
  15. return a * b
  16. def div(m, n):
  17. return not divmod(n, m)[1]
  18. MAX = 2000000
  19. all_primes = list(primes_until(MAX))
  20. def primes(n):
  21. for p in all_primes:
  22. if p >= n:
  23. raise StopIteration
  24. yield p
  25. def phi(n):
  26. return reduce(times, iter(1 - 1 / p for p in primes(n) if div(p, n)), n)
  27. def resilience(d):
  28. return phi(d) / (d - 1)
  29. d = 2
  30. try:
  31. while resilience(d) >= 15499 / 94744:
  32. d += 1
  33. if d == MAX:
  34. print 'maximum reached:',
  35. break
  36. except KeyboardInterrupt:
  37. print 'interrupted:',
  38. print d