58.py 926 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. from math import sqrt
  2. def prime(n):
  3. """Returns a boolean indicating whether an integer is a prime"""
  4. if n <= 1:
  5. return False
  6. for i in range(2, int(sqrt(n) + 1)):
  7. if n % i == 0:
  8. return False
  9. return True
  10. def upright(d):
  11. return 4*d**2-10*d+7
  12. def upleft(d):
  13. return 4*d**2-8*d+5
  14. def downleft(d):
  15. return 4*d**2-6*d+3
  16. def downright(d):
  17. return 4*d**2-4*d+1
  18. def percentPrimeSpiral(sideLen):
  19. diagonalLen = (sideLen+1)/2
  20. totalDiagonals = (diagonalLen-1)*4 + 1
  21. numPrimes = 0
  22. for i in range(1,diagonalLen+1):
  23. if prime(upright(i)):
  24. numPrimes += 1
  25. if prime(upleft(i)):
  26. numPrimes += 1
  27. if prime(downright(i)):
  28. numPrimes += 1
  29. if prime(downleft(i)):
  30. numPrimes += 1
  31. return numPrimes / float(totalDiagonals)
  32. def main():
  33. primeRatio = .99
  34. sideLen = 1001
  35. while primeRatio > 0.12:
  36. primeRatio = percentPrimeSpiral(sideLen)
  37. sideLen += 10
  38. print primeRatio
  39. print sideLen
  40. print primeRatio
  41. main()