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}