martes, 10 de abril de 2012

Project Euler 41

#include <iostream>
#include <algorithm>
using namespace std;
const int n= 7654322;
bool esPrimo[n+1];
void generarCriba()
{
    for(int i = 3 ; i <= n; i+=2)
        esPrimo[i] = true;
    for(int i = 4 ; i <= n; i+=2)
        esPrimo[i] = false;
    esPrimo[2] = true;
    for(int i = 3; i*i <= n; i+=2)
        if(esPrimo[i])
            for(int j = i+i ; j <= n; j+=i)
                esPrimo[j] = false;
}
int main()
{
    generarCriba();
    string ini = "7654321";
    string fin = "1234567";
    int i = 0 ;
    while(ini.compare(fin)!=0)
    {
        if(((ini[6]-'0')&1)!=0)
            if(esPrimo[atoi(ini.data())])
            {
                cout << ini << endl;
                break;
            }
        prev_permutation(ini.begin(),ini.end());
    }
    return 0;
}

No hay comentarios:

Publicar un comentario