¿Cuál es el enfoque para resolver el problema # 168 en el Proyecto Euler (por supuesto, no la fuerza bruta)?

El número con la propiedad de rotación a la derecha tiene la forma:

ABCD y DABC = k * ABCD

Podemos ver fácilmente que k debería ser menor que 10, porque si k es mayor que 10, k * ABCD tendrá más dígitos que ABCD.

Para cada número de k de 1 a 9, y con el dígito más significativo (MSD) es a, a de k a 9, podemos encontrar el número mínimo X que satisface X / k es la rotación izquierda de X, y X tiene su MSD es a.

Pseudocódigo:

para (int k = 1; k <10; k ++) {
para (int a = k; a <10; a ++) {
largo X = 0;
int cur = a;
int mod = 0;
hacer{
X = X * 10 + cur;
cur = (mod * 10 + cur) / k; // El resultado de esta división es el siguiente dígito de X
mod = (mod * 10 + cur)% k;
if (par visto anteriormente)
rotura;
} while (cur! = a && mod! = 0);
// Tenga en cuenta que iteraremos menos de 100 pasos, ya que solo hay un valor 10 * 10 de par (cur, mod).
}
}

Notamos que, todo número Y <10 ^ 100 que Y / k es la rotación izquierda de Y tendrá la forma XXXXXX …

Entonces, el trabajo ahora es simple, ya que cada Y terminará con X, solo mantenga los últimos 5 dígitos de X y multiplique por la cantidad de números Y válidos (= 100 / número de dígitos de X).

Suma todos esos 5 dígitos, obtendremos la respuesta para este problema.

Desde aquí: Proyecto Euler # 168

More Interesting

¿Cómo asigno enteros de o a n en una matriz bidimensional en Java?

¿Por qué se utiliza la ordenación del montón?

¿Usar un tipo de inserción de 50 elementos tendrá el mismo tiempo de ejecución que usar un tipo de inserción de 10 elementos 5 veces?

¿Cuál es la mejor manera de comprender y dominar la estructura de datos?

¿Por qué el valor de matriz no se incrementa cuando intento rotarlo?

¿Cuán específicamente la memoria de la clase de almacenamiento cambiará las arquitecturas, los ecosistemas (incluidas las opciones de lenguaje de programación) y los algoritmos para big data?

¿Necesitamos aprender el algoritmo primero antes de aprender el desarrollo web?

En file.log, cada línea comienza con una marca de fecha completa. ¿Qué comando podría usarse para devolverme las líneas N-1, N y N + 1 con una diferencia de tiempo mayor que X segundos entre N y N + 1?

¿Puedo escribir sobre mi propio algoritmo de clasificación en CV?

¿Cuál es el mejor enfoque para resolver el problema que CRYPTO preguntó en el concurso de codificación PRAVEGA 2014 celebrado en Codechef el 9 de noviembre?

¿Cuál es la mejor manera de aprender algoritmos de informática?

Cómo usar la primera búsqueda en profundidad en un laberinto

¿Los algoritmos de aprendizaje y las estructuras de datos son muy importantes para la informática y la programación?

¿Qué son los problemas NP-completos? ¿Cómo podemos resolverlos?

¿Qué algoritmo puedo usar para generar enteros (pseudo) aleatorios con una duración de ciclo infinito?