martes, 10 de abril de 2012

Project Euler 37

#include <iostream>
#include <bitset>
#include <math.h>
using namespace std;
bool esPrimo(int n)
{
    if(n==1)
        return false;
    for(int i = 2; i*i<=n; i++)
        if(n%i==0)
            return false;
    return true;
}

bool esCPI(int n)
{
    int nc = 10;
    while(nc<n)
    {
        if(!esPrimo(n%nc))
            return false;
        nc *= 10;
    }
    return true;
}
int main()
{

    int ini=0,fin=0;
    int term[] = {1,3,7,9};
    int td[100]= {2,3,5,7};

    int pos=4;
    ini = 0;
    fin = 3;
    for(int cd = 1; cd<=9; cd++)
    {
        for(int i=ini ; i<=fin; i++)
        {
            for(int t = 0 ; t<=3; t++)
            {
                int ope = td[i]*10+term[t];
                if(esPrimo(ope))
                    td[pos++] = ope;
            }
        }
        ini = fin+1;
        fin = pos-1;
    }
    int sum = 0 ,cant = 0;
    for(int i = 4; i<=fin ; i++)
        if(esCPI(td[i]))
        {
            cout << td[i] << endl;
            sum += td[i];
            cant++;
        }
    cout << "cantidad total = "<<cant<<endl;
    cout << "resultado final = "<<sum<<endl;
    return 0;
}

No hay comentarios:

Publicar un comentario