Filename: prob27.cc
// Prob 27
// 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.
//
#include <iostream>
#include <math.h>
#include <sstream>
#include <vector>
#include <algorithm>
#define UB (80*80)+(80*1000)+(1000)
using namespace std;
static inline bool isPrime(const unsigned int n, const vector<unsigned int> &primes)
{
return primes.end() != find(primes.begin(), primes.end(), n);
}
static bool isPrime(const unsigned int n)
{
if(n%2 == 0) return false;
for(int i=3; i<=ceil(sqrt(n)); i+=2)
{
if(n%i == 0)
{
return false;
}
}
return true;
}
static inline int qf(int a, int b, int n)
{
return n*n + a*n + b;
}
int main()
{
vector<unsigned int> primes;
primes.push_back(2);
for(unsigned int i=3; i<UB; i+=2)
{
if(isPrime(i))
{
primes.push_back(i);
}
}
cout << "starting (" << UB << ")" << endl;
int max_a = -1001;
int max_b = -1001;
int max_n = -1;
for(vector<unsigned int>::const_iterator b = primes.begin();
b != primes.end() && *b<=1000;
++b)
{
for(int a=-1*(*b); a<=1000; a+=2)
{
int n=0;
while(isPrime(qf(a,*b,n)))
{
++n;
}
if(n>max_n)
{
max_n = n;
max_a = a;
max_b = *b;
}
}
}
cout << "answer: (n^2 + " << max_a << "n + " << max_b << ") and n = 0 - " << max_n << endl;
cout << "answer: " << max_a * max_b << endl;
return 0;
}
syntax highlighted by Code2HTML, v. 0.9.1
No comments:
Post a Comment