martes, 10 de abril de 2012

Project Euler 35

#include <iostream>
#include <bitset>
using namespace std;
const int n = 1000000;
bitset<n+1> criba;
void generarCriba()
{
    criba[0] = criba[1] = true;
    for(int i = 2 ; i*i<=n; i++)
        if(!criba[i])
            for(int j = i+i; j<=n; j +=i )
                criba[j]= true;

}
int main()
{
    generarCriba();
    int cont = 4;//2,3,5,7 ya cuentan como primos circulares
    int cc = 1;
    int sncc= 100;
    int nc = 10;
    for(int i = 10 ; i<n; i++)
    {
        if(i==sncc)
        {
            cc++;
            sncc *=10;
            nc *= 10;
        }
        if(!criba[i])
        {
            int num = i;
            int c = 0;

            for(int u = 1 ; u<=cc; u++)
            {
                int d = num%10;
                num /= 10;
                num = (d*nc+num);
                if(!criba[num])
                    c++;
                else
                    break;
            }

            if(c == cc)
                cont++;
        }
    }
    cout <<"Resultado final = "<< cont<< endl;
    return 0;
}

No hay comentarios:

Publicar un comentario