#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