Original

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.

和訳

オイラーは以下の二次式を考案している:

n2 + n + 41.
この式は, nを0から39までの連続する整数としたときに40個の素数を生成する. しかし, n = 40のとき402 + 40 + 41 = 40(40 + 1) + 41となり41で割り切れる. また, n = 41のときは412 + 41 + 41であり明らかに41で割り切れる.

計算機を用いて, 二次式 n2 – 79n + 1601という式が発見できた. これはn = 0 から 79 の連続する整数で素数を生成する. 係数の積は, -79 × 1601 で -126479である.

さて, |a| < 1000, |b| < 1000 として以下の二次式を考える (ここで|a|は絶対値): n2 + an + b n=0から始めて連続する整数で素数を生成したときに最長の長さとなる上の二次式の, 係数a, bの積を答えよ.

当てにならないソースコード(C#)

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
using System;

namespace ProjectEuler {
    class Problem27 : Problem{
        public Problem27() {
            Primes primes = new Primes(500);

            int a, b=0, n, max = 0, answer = 0;
            for (int i=1;b<1000;i++) {
                b = (int)primes[i];
                for (a = -999; a < 1000; a+=2) {
                    for (n = 0; n <= b; n++) {
                        long num = Number(a, b, n);
                        if (primes.IsPrime(num)) {
                            continue;
                        }
                        if (n > max) {
                            max = n;
                            answer = a * b;
                        }
                        break;
                    }
                }
            }
            Console.WriteLine("> " + answer);
        }
        long Number(int a, int b, int n) {
            return n * (n + a) + b;
        }
    }
}


Primes
n=0 のときを考えると b は必ず素数でなくてはいけません。
これだけでもだいぶ絞れます。