Jelajahi Sumber

Working Spiral primes

Too slow implementation, will be refactored
Adel Qalieh 13 tahun lalu
induk
melakukan
c10a50dd6f
1 mengubah file dengan 49 tambahan dan 0 penghapusan
  1. 49 0
      58.py

+ 49 - 0
58.py

@@ -0,0 +1,49 @@
+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
+
+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
+
+def percentPrimeSpiral(sideLen):
+	diagonalLen = (sideLen+1)/2
+	totalDiagonals = (diagonalLen-1)*4 + 1
+
+	numPrimes = 0
+	for i in range(1,diagonalLen+1):
+		if prime(upright(i)):
+			numPrimes += 1
+		if prime(upleft(i)):
+			numPrimes += 1
+		if prime(downright(i)):
+			numPrimes += 1	
+		if prime(downleft(i)):
+			numPrimes += 1
+	return numPrimes / float(totalDiagonals)
+
+def main():
+	primeRatio = .99
+	sideLen = 1001
+
+	while primeRatio > 0.12:
+		primeRatio = percentPrimeSpiral(sideLen)
+		sideLen += 10
+		print primeRatio
+
+	print sideLen
+	print primeRatio	
+
+main()