#include <iostream>
using namespace std;
bool esPeriodico(int n)
{
while((n&1)==0) n >>= 1;
while(n%5==0) n /= 5;
if(n!=1)
return true;
return false;
}
int cantidad(int divisor)
{
int restos[10000]= {0};
bool pasados[10000]= {0};
int pos = 1;
int contador = 0;
int dividendo;
restos[0] = 10;
dividendo = 10;
while(!pasados[dividendo])
{
pasados[dividendo] = true;
restos[pos++] = dividendo;
while(dividendo < divisor)
{
dividendo *= 10;
pasados[dividendo] = true;
restos[pos++] = dividendo;
contador++;
}
dividendo =(dividendo%divisor)*10;
restos[pos++] = dividendo;
contador++;
}
int i = 0;
while(restos[i]!=dividendo && i < 10000)
i++;
if(i<pos)
return (contador-i+1);
return contador;
}
int main()
{
int max , d,aux;
for(int i = 3; i<=1000; i++)
if(esPeriodico(i))
{
aux = cantidad(i);
if(aux>max)
{
max = aux;
d = i;
}
}
cout << "El d con el ciclo mas grande es " << d << " con un ciclo de "<<max<< endl;
return 0;
}
jueves, 9 de febrero de 2012
Project Euler - 26
Bueno aquí mi primer código para el blog es el problema 26 de projecteuler.net , por pensar en resolverlo rápido tarde 3 días en darme cuenta de que solo era aplicar lo que nos enseñan en primaria, creo que aprendí una gran lección:"No todos los problemas tienen que tener soluciones largas y complicadas."
Suscribirse a:
Enviar comentarios (Atom)
No hay comentarios:
Publicar un comentario