Rust Implementation of Problem 27

View source code here on GitHub!

Includes

Problem Solution

pub fn problems::p0027::p0027() -> utils::Answer
 1/*
 2Project Euler Problem 27
 3
 4Another good problem for code golf
 5
 6Problem:Euler discovered the remarkable quadratic formula:
 7
 8n**2+n+41
 9
10It turns out that the formula will produce 40 primes for the consecutive
11integer values 0≤n≤39. However, when ``n=40``, ``40**2+40+41=40(40+1)+41`` is divisible
12by 41, and certainly when ``n=41``, ``41**2+41+41`` is clearly divisible by 41.
13
14The incredible formula ``n**2−79n+1601`` was discovered, which produces 80 primes
15for the consecutive values 0≤n≤79. The product of the coefficients, −79 and
161601, is −126479.
17
18Considering quadratics of the form:
19
20    n**2+an+b
21
22, where ``|a|<1000`` and ``|b|≤1000``
23
24where ``|n|`` is the modulus/absolute value of n, e.g. ``|11|=11`` and ``|−4|=4``
25
26Find the product of the coefficients, a and b, for the quadratic expression
27that produces the maximum number of primes for consecutive values of n,
28starting with n=0.
29*/
30use crate::include::primes::{is_prime,primes_until};
31use crate::include::utils::Answer;
32
33pub fn p0027() -> Answer {
34    let mut streak: i64 = 0;
35    let mut answer: i64 = 0;
36
37    for b in primes_until::<i64>(1001).flat_map(|x| vec![x, -x]) {
38        for a in (-999)..1000 {
39            let mut i = 0;
40            while is_prime((i + a) * i + b) {
41                i += 1;
42            }
43            if i > streak {
44                streak = i;
45                answer = a * b;
46            }
47        }
48    }
49    return Answer::Int(answer.into());
50}

Tags: sequence-generator, prime-number, quadratic-equation, rust-iterator