| 123456789101112131415161718192021222324252627282930313233343536373839404142434445 |
- from math import sqrt
- def prime(n):
- """Returns a boolean indicating whether an integer is a prime"""
- if n <= 1:
- return False
- for i in range(2, int(sqrt(n) + 1)):
- if n % i == 0:
- return False
- return True
- # Set of helper functions along each diagonal
- def upright(d):
- return 4*d**2-10*d+7
- def upleft(d):
- return 4*d**2-8*d+5
- def downleft(d):
- return 4*d**2-6*d+3
- def downright(d):
- return 4*d**2-4*d+1
- # Starting values for while loop
- primeRatio = 1.0
- sideLen = 3
- numPrimes = 0
- while primeRatio > 0.10:
- diagonalLen = (sideLen+1)/2
- totalDiagonals = (diagonalLen-1)*4 + 1
- if prime(upright(diagonalLen)):
- numPrimes += 1
- if prime(upleft(diagonalLen)):
- numPrimes += 1
- if prime(downright(diagonalLen)):
- numPrimes += 1
- if prime(downleft(diagonalLen)):
- numPrimes += 1
- primeRatio = numPrimes / float(totalDiagonals)
- sideLen += 2
- # Adjust sidelength by 2
- print(sideLen - 2)
- print(primeRatio)
|