-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy path027.py
executable file
·46 lines (33 loc) · 1.45 KB
/
027.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
#!/usr/bin/python
# -*- coding: utf-8 -*-
#Euler published the remarkable quadratic formula:
#n² + n + 41
#It turns out that the formula will produce 40 primes for the consecutive values n = 0 to 39. However, when n = 40, 402 + 40 + 41 = 40(40 + 1) + 41 is divisible by 41, and certainly when n = 41, 41² + 41 + 41 is clearly divisible by 41.
#Using computers, the incredible formula n² − 79n + 1601 was discovered, which produces 80 primes for the consecutive values n = 0 to 79. The product of the coefficients, −79 and 1601, is −126479.
#Considering quadratics of the form:
#n² + an + 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.
#Answer:
#-59231
from time import time; t=time()
from mathplus import sieve, product
M = 15000
primes = sieve(M)
# one of (1+a+b, b*b+a*b+b) is not a prime, so n*n+a*n+b has less than range(b) primes
ab = [[a, b, b] for a, b in product(
range(-1000+1, 1000, 2),
[i for i in range(83, 1000, 2) if primes[i]]
)]
n = 0
lastone = None
while len(ab) > 1:
lastone = ab[0]
x = 2*n+1
for v in ab:
v[2] += x+v[0]
ab = [[a, b, x] for a, b, x in ab if x > 0 and (x >= M or primes[x])]
n += 1
lastone = ab[0]
print(lastone[0]*lastone[1])#, time()-t