JavaScript Implementation of Problem 27
View source code here on GitHub!
Includes
Problem Solution
- p0027()
Project Euler Problem 27
Another good problem for code golf
Problem: 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 whenn=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+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.
- Returns:
number --
1/**
2 * Project Euler Problem 27
3 *
4 * Another good problem for code golf
5 *
6 * Problem: Euler discovered the remarkable quadratic formula:
7 *
8 * n**2+n+41
9 *
10 * It turns out that the formula will produce 40 primes for the consecutive
11 * integer values 0≤n≤39. However, when ``n=40``, ``40**2+40+41=40(40+1)+41`` is divisible
12 * by 41, and certainly when ``n=41``, ``41**2+41+41`` is clearly divisible by 41.
13 *
14 * The incredible formula ``n**2−79n+1601`` was discovered, which produces 80 primes
15 * for the consecutive values 0≤n≤79. The product of the coefficients, −79 and
16 * 1601, is −126479.
17 *
18 * Considering quadratics of the form:
19 *
20 * n**2+an+b
21 *
22 * , where ``|a|<1000`` and ``|b|≤1000``
23 *
24 * where ``|n|`` is the modulus/absolute value of n, e.g. ``|11|=11`` and ``|−4|=4``
25 *
26 * Find the product of the coefficients, a and b, for the quadratic expression
27 * that produces the maximum number of primes for consecutive values of n,
28 * starting with n=0.
29 *
30 * @return {number}
31 */
32exports.p0027 = function() {
33 let streak = 0;
34 let answer = 0;
35 for (let a = -999; a < 1000; a++) {
36 for (const b of primes.primesAndNegatives(1001)) {
37 let i = 0;
38 while (primes.isPrime((i + a) * i + b)) {
39 i++;
40 }
41 if (i > streak) {
42 streak = i;
43 answer = a * b;
44 }
45 }
46 }
47 return answer;
48};
49
50const primes = require('./lib/primes.js');