Definición
Un número es positivo si es mayor que cero.
Un número ( A
) es el divisor de otro número ( B
) si A
puede dividirse B
sin resto.
Por ejemplo, 2
es un divisor de 6
porque 2
puede dividirse 6
sin resto.
Objetivo
Su tarea es escribir un programa / función que tome un número positivo y luego encontrar todos sus divisores.
Restricción
- No puede utilizar ninguna función integrada relacionada con la prima o la factorización .
- La complejidad de su algoritmo no debe exceder O (sqrt (n)) .
Libertad
- La lista de salida puede contener duplicados.
- La lista de salida no necesita ser ordenada.
Puntuación
Este es el código de golf . La solución más corta en bytes gana.
Casos de prueba
input output
1 1
2 1,2
6 1,2,3,6
9 1,3,9
code-golf
arithmetic
restricted-source
number-theory
restricted-complexity
Monja permeable
fuente
fuente
O(sqrt(n))
.99 (1 3 9 11 33 99)
Respuestas:
PostgreSQL, 176 bytes
SqlFiddleDemo
Entrada:
(SELECT ...v)
Cómo funciona:
(SELECT ...v)
- entradagenerate_series(1, sqrt(v)::int)
- números del 1 al sqrt (n)WHERE v%r=0
divisores de filtroSELECT r FROM c UNION SELECT v/r FROM c
generete resto de divisores y combinanSELECT string_agg(r::text,',' ORDER BY r)
producir un resultado final separado por comasEntrada como tabla:
SqlFiddleDemo
Salida:
fuente
C # 6, 75 bytes
Basado en la solución C # de downrep_nation, pero recursivo y más avanzado utilizando algunas características nuevas de C # 6.
El algoritmo básico es el mismo que el presentado por downrep_nation. El bucle for se convierte en una recursividad, por lo tanto, el segundo parámetro. el inicio predeterminado se realiza mediante el parámetro predeterminado, por lo tanto, la función se llama solo con el número de inicio requerido.
Como la mayoría de las respuestas aquí (todavía) no siguen el formato de salida exacto de los ejemplos, lo mantengo como está, pero como inconveniente, la función incluye una coma final en el resultado.
fuente
R ,
3631 bytesPruébalo en línea!
-5 bytes gracias a Robin Ryder
fuente
n^.5
lugar desqrt(n)
.1
muchas veces.Matlab, 48 bytes
fuente
sqrt(n)
y luego pongo cada divisord
yn/d
en mi lista.b=~mod(n,a)
para guardar 1 byte?J 26 bytes
Explicación
fuente
JavaScript (ES6) - 48 bytes
¡No muy eficiente pero funciona! Ejemplo a continuación:
fuente
MATL , 12 bytes
El enfoque es similar al de la respuesta de @ flawr .
Pruébalo en línea!
Explicación
fuente
05AB1E ,
1412 bytesCódigo:
Explicación:
Utiliza la codificación CP-1252 . Pruébalo en línea! .
fuente
Python 2, 64 bytes
Esta función anónima genera una lista de divisores. Los divisores se calculan por la división de prueba de los enteros en el rango
[1, ceil(sqrt(n))]
, que esO(sqrt(n))
. Sin % x == 0
(equivalente an%x<1
), entonces ambosx
yn/x
son divisores den
.Pruébalo en línea
fuente
Jalea , 9 bytes
Como las otras respuestas, esto es O (√n) si hacemos la suposición (falsa) de que la división entera es O (1) .
Cómo funciona
Pruébalo en línea!
fuente
Javascript, 47 bytes
fuente
Mathematica, 50 bytes
Similar a la solución de @ flawr .
Realiza la división del rastro para x desde 1 hasta la raíz cuadrada de n y, si es divisible, la guarda en una lista como x y n / x .
∣
requiere 3 bytes para representar en UTF-8, por lo que la cadena de 48 caracteres requiere 50 bytes en representación UTF-8.Uso
fuente
JavaScript (ES6),
6662 bytesPensé en escribir una versión que devolviera una lista desduplicada ordenada, y en realidad resultó ser 4 bytes más corta ...
fuente
C #, 87 bytes
Golfed
Sin golf
Código completo
Lanzamientos
87 bytes
- Solución inicial.Notas
var
'syint
' s en lugar deString
'syInt32
' s para acortar el código, mientras que en el código Ungolfed y Full Code usoString
'syInt32
' s para que el código sea más legible.fuente
for
generalmente es mejor quewhile
.for
bucle tendría la misma longitud que elwhile
bucle. En este caso es irrelevante tener o tener el otro.Lua, 83 bytes
No podría hacerlo mejor, desafortunadamente
fuente
Perl 6 , 40 bytes
Explicación:
Uso:
fuente
c #, 87 bytes
No sé si esto funciona para todos los números, sospecho que sí.
pero la complejidad es correcta, entonces eso ya no es algo
fuente
Ruby, 56 bytes
fuente
Código de máquina IA-32, 27 bytes
Hexdump:
Código fuente (sintaxis de MS Visual Studio):
El primer parámetro (
ecx
) es un puntero a la salida, el segundo parámetro (edx
) es el número. No marca el final de la salida de ninguna manera; uno debe completar previamente la matriz de salida con ceros para encontrar el final de la lista.Un programa completo de C ++ que usa este código:
La salida tiene algunos problemas técnicos, a pesar de que sigue las especificaciones (no es necesario ordenarlos, no es necesario que sean únicos).
Entrada: 69
Salida:
Los divisores están en pares.
Entrada: 100
Salida:
Para cuadrados perfectos, el último divisor se emite dos veces (es un par consigo mismo).
Entrada: 30
Salida:
Si la entrada está cerca de un cuadrado perfecto, el último par sale dos veces. Se debe al orden de las verificaciones en el bucle: primero, verifica "resto = 0" y las salidas, y solo luego verifica "cociente <divisor" para salir del bucle.
fuente
SmileBASIC, 49 bytes
Utiliza el hecho de que
D>N/D
=D>sqrt(N)
para números positivosfuente
C,
8781 bytesMejorado por @ceilingcat , 81 bytes:
Pruébalo en línea!
Mi respuesta original, 87 bytes:
Compilar
gcc div.c -o div -lm
y ejecutar con./div <n>
.Bonificación: una variante aún más corta con complejidad de tiempo O (n) y codificada
n
(46 bytes + longitud den
):Editar: Gracias a @Sriotchilism O'Zaic por señalar que las entradas no deben codificarse, modifiqué la presentación principal para tomar la entrada a través de argv.
fuente
n
la entrada? Poner la entrada en una variable no es una forma aceptada de hacer entrada aquí por varias razones. Puede ver más sobre nuestros formularios de entrada y salida aceptados y no aceptados aquí: codegolf.meta.stackexchange.com/questions/2447/… . Y si tiene curiosidad acerca de un lenguaje específico (por ejemplo, C) puede buscar aquí: codegolf.meta.stackexchange.com/questions/11924/… .n
es la entrada. Intentaré modificarlo para que tome la entrada de otra manera. ¡Gracias por la información!APL (NARS), 22 caracteres, 44 bytes
prueba:
fuente
C # (compilador interactivo de Visual C #) , 40 bytes
Simplemente proporcione una respuesta actualizada de C #
Pruébalo en línea!
fuente