#include <iostream>
#include <cassert>
#include <cmath>
using namespace std;
bool isPrime (int);
void generatePrimes (bool*, int);
const int SIZE = 1000000;
bool primes[SIZE];
int main ()
{
int sum = 0, seq = 0, highestSeq = 0, highestPrime = 0;
generatePrimes (primes, SIZE);
int iLimit = 1000000,
jLimit = 1000000;
for (int i = 0; i < iLimit; i++)
{
sum = 0;
seq = 0;
if (isPrime (i))
{
for (int j = i; j < jLimit; j+=2)
{
if (isPrime (j))
{
sum += j;
seq++;
}
if (isPrime (sum))
{
if (seq > highestSeq)
{
highestSeq = seq;
highestPrime = sum;
}
}
if (sum > 1000000)
break;
}
}
}
cout << "Highest prime: " << highestPrime << endl
<< "With a sequence of: " << highestSeq << endl;
return 0;
}
// ----------------------------------------------------------------------------
// Check to see if a number is a prime number
// ----------------------------------------------------------------------------
bool isPrime (int num)
{
assert (num >= 0);
if (num >= SIZE)
{
if (num == 2)
return true;
if (num <= 2 || num % 2 == 0)
return false;
for (int i = 3; i < num / 2; i += 2)
if (num % i == 0)
return false;
return true;
}
return primes[num];
}
// ----------------------------------------------------------------------------
// Generate a list of all of the primes numbers up to a specific limit.
// ----------------------------------------------------------------------------
void generatePrimes (bool *primes, int size)
{
int pos = 2;
primes[0] = false;
primes[1] = false;
for (int i = 2; i < size; i++)
primes[i] = true;
while (pos < size)
{
for (int i = 2; i * pos < size; i++)
primes[i * pos] = false;
pos++;
while (primes[pos] == false && pos < size)
pos++;
}
}
Friday, March 11, 2011
Problem #50
This problem wasnt very hard, I pretty much do a brute force approach. I test 2, 2+3, 2+3+5, ..., 3, 3+5, 3+5+7, ..., 5, 5+7, ...
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment