단순하게 푼 euler 27번. 그냥 -999 ~ 999 의 a/b에 대해 모든 경우의 수를 구해서 풀었다. 소수를 저장해두면 그나마 빠르게 풀 수 있다. 실행시간은 8초정도 걸린다.

/*
   Problem 27 : Quadratic primes 
*/

#include <iostream>
#include <cmath>
#include <cstring>
#include <stdio.h>
#include <string.h>
#include <ctime>
#include <math.h>
#include <vector>
#include <algorithm>

#include <map>

using namespace std;

std::map<int, int> primes;
//primes.insert( map<int, int>::value_type(2,2));
//primes.insert( std::pair<int,int>(2,2)); 

bool isprime( int n)
{
	map<int,int>::iterator it = primes.find(n);

	if( it != primes.end()) {
		return true;
	}

	if (n == 2){
		primes.insert( map<int,int>::value_type(n,n));
		return true;
	}

	// else calculate
	for(int i=2; i<= sqrt(n); i++)
	{
		if (n%i ==0){
			return false;
		}
	}

	primes.insert( map<int,int>::value_type(n,n));
	return true;
}

int consecutive_primes( int a, int b)
{
	cout << "a=" << a << ",b="<<b <<endl;
	// n^2 + a*n + b
	int max = 0;
	for(int n=0;;n++)
	{
		int q = n*n + a*n + b;
		if (q <= 1) break;
		if (!isprime(q)) break;

		//cout << "\tconsecutive prime n=" << n<< endl;
		max++;
	}
	return max; 
}

int main(int argc, char** argv)
{
	clock_t begin = clock();
	int max = 0;
	int a;
	int b;

	for(int ai=-999; ai< 1000; ai++) 
	{
		for( int bj= -999; bj<1000; bj++)
		{
			int n = consecutive_primes(ai, bj);
			if (n > max) {
				max = n;
				a = ai;
				b = bj;
			}
		}
	}

	clock_t end = clock();

	std::cout << "a=" << a << " ,b=" << b << " ,max number of consecutive primes=" << max << std::endl;
	std::cout << "elapsed time=" << double(end - begin) / CLOCKS_PER_SEC << std::endl;
	return 0;
}