Dada una entrada de un entero ≥ 2, genera una lista de sus divisores ordenados por los exponentes en sus factorizaciones primas, en orden ascendente, ordenando primero por el primo más grande, luego por el segundo más grande, y así sucesivamente.
Como ejemplo, tome el número entero 72, que es 2 3 3 2 . Tiene los divisores
1 3^0 · 2^0
2 3^0 · 2^1
3 3^1 · 2^0
4 3^0 · 2^2
6 3^1 · 2^1
8 3^0 · 2^3
9 3^2 · 2^0
12 3^1 · 2^2
18 3^2 · 2^1
24 3^1 · 2^3
36 3^2 · 2^2
72 3^2 · 2^3
Cuando se ordena en orden ascendente por los exponentes en los factores primos, con primos más grandes teniendo prioridad, esto se convierte
1 3^0 · 2^0
2 3^0 · 2^1
4 3^0 · 2^2
8 3^0 · 2^3
3 3^1 · 2^0
6 3^1 · 2^1
12 3^1 · 2^2
24 3^1 · 2^3
9 3^2 · 2^0
18 3^2 · 2^1
36 3^2 · 2^2
72 3^2 · 2^3
Tenga en cuenta que la lista se ordena primero por el orden del exponente de 3, y luego por el exponente de 2. También puede considerar esto como una lectura de izquierda a derecha y de arriba a abajo en la siguiente cuadrícula:
2^0 2^1 2^2 2^3
3^0 1 2 4 8
3^1 3 6 12 24
3^2 9 18 36 72
Casos de prueba:
2 => 1 2
72 => 1 2 4 8 3 6 12 24 9 18 36 72
101 => 1 101
360 => 1 2 4 8 3 6 12 24 9 18 36 72 5 10 20 40 15 30 60 120 45 90 180 360
3780 => 1 2 4 3 6 12 9 18 36 27 54 108 5 10 20 15 30 60 45 90 180 135 270 540 7 14 28 21 42 84 63 126 252 189 378 756 35 70 140 105 210 420 315 630 1260 945 1890 3780
30030 => 1 2 3 6 5 10 15 30 7 14 21 42 35 70 105 210 11 22 33 66 55 110 165 330 77 154 231 462 385 770 1155 2310 13 26 39 78 65 130 195 390 91 182 273 546 455 910 1365 2730 143 286 429 858 715 1430 2145 4290 1001 2002 3003 6006 5005 10010 15015 30030
65536 => 1 2 4 8 16 32 64 128 256 512 1024 2048 4096 8192 16384 32768 65536
74088 => 1 2 4 8 3 6 12 24 9 18 36 72 27 54 108 216 7 14 28 56 21 42 84 168 63 126 252 504 189 378 756 1512 49 98 196 392 147 294 588 1176 441 882 1764 3528 1323 2646 5292 10584 343 686 1372 2744 1029 2058 4116 8232 3087 6174 12348 24696 9261 18522 37044 74088
Como se trata de código de golf , gana el código más corto en bytes.
Jalea ,
87 bytesPruébalo en línea! Gracias a @Dennis por -1 byte.
fuente
ÆDÆfU$Þ
(usando la nueva clasificación de Jelly), guarda un byte.Pyth, 10 bytes
Pruébelo en línea: demostración
Lamentablemente, el producto sobre una lista vacía no se define como 1 en Pyth. Esto cuesta tres bytes adicionales.
Explicación:
fuente
Jalea ,
1210 bytes2 bytes gracias a @ Sp3000.
Pruébalo en línea!
Banco de pruebas.
Créditos a @ Sp3000 por proponer el formato de la explicación.
fuente
Python 2, 85 bytes
Sin factorización, sin clasificación. Implementación recursiva de la misma longitud:
fuente
En realidad, 19 bytes
Pruébalo en línea!
Explicación:
fuente
JavaScript, 78 bytes
Basado en la idea de @ xnor, aunque no entendí su código, así que tuve que volver a implementarlo desde cero. El algoritmo básico es que comienzas con [1] y multiplicas por [1, ..., pᵏ] para cada pᵏ en la factorización prima de n, aunque como no tengo factorización prima o producto cartesiano tengo que hacerlo Todo recursivamente. Ejemplo:
fuente
R, 196 bytes
Esto va a ser ineficiente como diablos porque apenas resistí la tentación de usar
library(primes)
. Crea un vectord
de todos los factores primos de la entrada, calcula su frecuencia (número de ocurrencias) y luego calcula el producto cartesiano de todas las potencias posibles (desde 0 hasta la frecuencia respectivab[i]
), a las cualesprod
se aplica la función. ¡Maldita sea, casos especiales de 2 y 3! De lo contrario, este es un buen escaparate del manejo del marco de datos R y las funciones vectoriales / operaciones por fila (¡e incluso latable
función puramente estadística !).Por supuesto, su eficiencia se puede mejorar a un costo de 15 bytes usando
r=2:ceiling(sqrt(n))
, si a alguien le importa. Aquí hay una versión más agradable sin golf:fuente
Mathematica 150 bytes
fuente
Brachylog , 3 bytes
Pruébalo en línea!
El código se lee más o menos como el título del desafío: "los factores de la entrada, ordenados por sus descomposiciones principales". Asegurándome de que esta belleza de 3 bytes realmente pasara los casos de prueba usando solo el sentido incorporado de Brachylog de cómo ordenar las listas terminó requiriendo que copie y pegue todos esos números en el Clojure REPL, donde los elementos de la lista están separados por espacios en blanco y las comas son espacios en blanco, pero resultó que sí funciona.
fuente
APL (Dyalog Extended) , 17 bytes
Muchas gracias a ngn y Adám por su ayuda en el golf de estos dos programas de APL en The APL Orchard , un excelente lugar para aprender APL y obtener ayuda de APL.
Pruébalo en línea!
Ungolfing
APL (Dyalog Unicode) , SBCS de 29 bytes
Pruébalo en línea!
Ungolfing
fuente
J,
3231 bytesToma las listas de primos y exponentes del entero de entrada, invierte cada uno y construye los divisores a partir de eso.
Uso
Explicación
fuente
Ruby, 71 bytes
Esta respuesta se basa en la respuesta de Python 2 de xnor.
Una alternativa de la misma longitud es:
No golfista:
fuente
Japt ,
129 bytes-3 bytes gracias a @Shaggy
Pruébalo en línea!
fuente
Japt, 7 bytes
Ejecútalo en línea
fuente
Mathematica, 56 bytes
fuente