#include <iostream>
#include <cmath>
#define LIM 10000
using namespace std;
int primos[5000]={0};
bool criba[LIM+1]={false};
int cantPrimos = 1;
void generarCriba(){
int i,j;
double raiz = sqrt(LIM);
for(i = 4 ; i<=LIM ;i+=2)
criba[i] = true;
for(i = 3 ; i<=raiz;i+=2)
if(!criba[i])
for(j = i+i ; j<=LIM ; j+=i)
criba[j] = true;
primos[0] = 2;
for(i = 3; i<=LIM;i+=2)
if(!criba[i])
primos[cantPrimos++] = i;
}
bool sePuedeEscribir(int n){
if(!criba[n])
return true;
int i;
for(i = 0; i<cantPrimos && primos[i]+2 <= n; i++){
int p = 1;
int var;
while((var=(primos[i]+(2*p*p)))<=n){
if(var==n)
return true;
p++;
}
}
return false;
}
int main()
{
generarCriba();
int n = 33;
while(true){
if(!sePuedeEscribir(n)){
cout << n<< endl ; return 0;
}
n+=2;
}
return 0;
}
miércoles, 11 de abril de 2012
Project Euler 46
Suscribirse a:
Enviar comentarios (Atom)
No hay comentarios:
Publicar un comentario