"""
Problem 27:
Euler discovered the remarkable quadratic formula:

n2+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:

n2+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.

Solved: O(n^2)
"""

from python.utils import fast_primes, is_prime
from itertools import count


def answer(n=1000):
    a, b = max(((a, b) for b in fast_primes(n + 1) for a in range(-b + 2, 0, 2)),
               key=lambda x: next(i for i in count(1) if not is_prime(abs(i ** 2 + x[0] * i + x[1]))))
    return a * b


if __name__ == '__main__':
    print("Answer is:", answer())
