-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path27.py
48 lines (41 loc) · 1.57 KB
/
27.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# Problem 27
# Quadratic Primes
# Euler discovered the remarkable quadratic formula:
# n^2 + n + 41
# It turns out that the formula will produce 40 primes for the consecutive integer values 0 ≤ n ≤ 39. However, when n = 40, 40^2 + 40 + 41 = 40(40 + 1) + 41 is divisible by 41, and certainly when n = 41, 41^2 + 41 + 41 is clearly divisible by 41.
# The incredible formula n^2 - 79n + 1601 was discovered, which produces 80 primes for the consecutive values 0 ≤ n ≤ 79. The product of the coefficients, -79 and 1601, is -126479.
# Considering quadratics of the form:
# n^2 + n + b, where |a| < 1000 and |b| ≤ 1000
# where |n| is the modulus/absolute value of n
# e.g. |11| = 11 and |-4| = 4
# Find the product of the coefficients, a and b, for the quadratic expression that produces the maximum number of primes for consecutive values of n, starting with n = 0.
import math
highest = 0
def checkPrime(number):
if number <= 1:
return False
elif number == 2:
return True
maxDivisor = math.ceil(math.sqrt(number)) + 1
if number % 2 == 0:
return False
for divisor in range (3, maxDivisor, 2):
if number % divisor == 0:
return False
return True
def consecutivePrimes(a, b):
n = 0
while True:
if checkPrime(n**2 + a * n + b):
n += 1
else:
break
return n
for a in range(-999, 1000):
for b in range(0, 1001):
consecutive = consecutivePrimes(a, b)
if consecutive > highest:
highest = consecutive
answer = a * b
print(answer)
# -59231