miércoles, 11 de abril de 2012

Project Euler 49

#include <iostream>
#include <cmath>
#include <algorithm>
#include <vector>
#include <set>
#include <stdlib.h>
using namespace std;
bool esPrimo(int n)
{
    if((n&1)==0)
        return (n==2);
    double raiz = sqrt(n);
    for(int i = 3; i<=raiz ; i+=2)
        if((n%i) == 0)
            return false;
    return true;
}
string parseString(int n)
{
    string sol = "";
    while(n>0)
        sol = (char)((n%10)+'0')+sol , n/=10;
    return sol;
}
bool esValido(string cad)
{
    for(int i= 0 ; i<cad.size(); i++)
        if(cad[i]=='0')
            return false;
    return true;
}
int main()
{

    bool probados[10000]= {false};
    for(int n = 1488; n<=9999; n++)
    {
        if(!probados[n])
        {
            string num = parseString(n);
            if(esValido(num))
            {
                vector<int> permutaciones;
                do
                {
                    int ent = atoi(num.data());
                    probados[ent] = true;
                    permutaciones.push_back(ent);

                }
                while(next_permutation(num.begin(),num.end()));

                int nroPer =permutaciones.size();
                for(int i = nroPer; i>=2 ; i--)
                    if(esPrimo(permutaciones[i]))
                        for(int j= i-1; j>=1 ; j--)
                            if(esPrimo(permutaciones[j]))
                                for(int k = j-1; k>=0; k--)
                                    if(esPrimo(permutaciones[k]))
                                        if(permutaciones[i]-permutaciones[j] == permutaciones[j]-permutaciones[k])
                                        {
                                            cout << permutaciones[k];
                                            cout << permutaciones[j];
                                            cout << permutaciones[i]<<endl;
                                            return 0;
                                        }
            }
        }
    }
    return 0;
}

No hay comentarios:

Publicar un comentario