Filename: prob50.cc
// Problem 50
// The prime 41, can be written as the sum of six consecutive primes:
//
// 41 = 2 + 3 + 5 + 7 + 11 + 13
// This is the longest sum of consecutive primes that adds to a prime below one-hundred.
//
// The longest sum of consecutive primes below one-thousand that adds to a prime, contains 21 terms, and is equal to 953.
//
// Which prime, below one-million, can be written as the sum of the most consecutive primes?
#include <iostream>
#include <math.h>
#include <sstream>
#include <vector>
#include <algorithm>
#include <stdio.h>
#define LB 3
#define UB 1000000
using namespace std;
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;
}
int main()
{
vector<int> primes;
primes.push_back(2);
for(int i=LB; i<UB; i+=2)
{
if(isPrime(i))
{
primes.push_back(i);
}
}
int answer = -1;
int current_max = -1;
for(int i=primes.size()-1; i>=0; --i)
{
for(unsigned int k=0; k<primes.size(); ++k)
{
int num_consecutive_primes = 0;
int total = 0;
for(unsigned int j=k; j<primes.size() && total < primes[i]; ++j)
{
total += primes[j];
++num_consecutive_primes;
if(total == primes[i])
{
if(current_max < num_consecutive_primes)
{
current_max = num_consecutive_primes;
answer = primes[i];
printf("current_max: %d ... ans: %d\n", current_max, answer);
}
}
}
}
}
printf("%d\n", answer);
return 0;
}
syntax highlighted by Code2HTML, v. 0.9.1
No comments:
Post a Comment