Cadenas de divisores

Una cadena de divisores de un número n es una lista donde cada elemento es un divisor de su siguiente elemento en la lista. Por ejemplo, las cadenas de divisores de 12 son [2,4,12], [2,6,12], [2,12], [3,6,12], [3,12], [4,12], [6,12] y [12].

Definir la función

tal que (cadenasDivisores n) es la lista de las cadenas de divisores de n. Por ejemplo,

Soluciones

Referencias

5 Comentarios

  1. Puede hacerse tan eficiente como la generación de todos los divisores si al generar los divisores se almacena la relación generadora a partir de la descomposición en factores. Aquí no se almacena dicha relación y se revisa divisibilidad. Aun así, tiene la misma complejidad («sólo» ahorraríamos la división en cada caso).

    1. No, no tiene la misma complejidad, siguiendo la relación de generación saltaríamos la revisión de divisibilidad para toda una secuencia de potenciales divisores (ej. si es n=p q^b con p>q^b ahorraríamos revisar los q, q^2, q^3, … cuando el previo es p). Es decir, aún puede hacerse notablemente más eficiente.

    2. Usando la relación de divisibilidad es notablemente más rápido, no obstante, no encuentro una forma de mantener dicha relación y generar las subsecuencias una única vez (sin repetidos), pero creo podría hacerse y evitar el nubOrd (con lo que sería todavía más rápido).

Escribe tu solución