#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