En esta tarea, debe escribir un programa que calcule los factores primos de un número. La entrada es un número natural 1 <n <2 ^ 32. El resultado es una lista de los factores primos del número en el siguiente formato. Los exponentes se deben omitir si son 1. Solo emiten números primos. (Suponiendo que la entrada es 131784):
131784 = 2 ^ 3 * 3 * 17 ^ 2 * 19
No se requiere usar la misma cantidad de espacio en blanco; se puede insertar un espacio en blanco cuando sea apropiado. Su programa debería completarse en menos de 10 minutos para cualquier entrada. El programa con la menor cantidad de caracteres gana.
code-golf
number-theory
primes
factoring
FUZxxl
fuente
fuente
Respuestas:
SageMath, 31 Bytes
Caso de prueba:
83891573479027823458394579234582347590825792034579235923475902312344444
Salidas:83891573479027823458394579234582347590825792034579235923475902312344444 = 2^2 * 3^2 * 89395597 * 98966790508447596609239 * 263396636003096040031295425789508274613
fuente
Ruby 1.9,
7470 caracteresEdiciones:
exponent > 1
fuente
Perl 5.10, 73
88Toma el número de entrada de la entrada estándar. Calculará factores para múltiples entradas si se proporcionan.
Cuenta como una diferencia para
perl -e
. 5.10 es necesario para el\K
metacarácter regex.fuente
factor
.p
opción?split/\D/,~factor $_~;$_="@_";
podrías escribir$_=~factor $_~;s/\D/ /g;
? (Por supuesto, reemplácelo~
con el backtick.)$_=`factor $_`;s/\D/ /g;
? El revestimiento de doble backtick ayuda.OCaml, 201 caracteres
Una traducción imperativa directa del mejor código de Python:
Por ejemplo,
(tenga en cuenta que he omitido la salida de la línea final.) Por diversión, con 213 caracteres, una versión
puramentefuncional, completamente ofuscada por el uso liberal de los operadores:fuente
Python,
140135133 caracteresfuente
' * %d'
... Y dos cosas más:65536 == 4**8
; Línea 7:if e:s+='*%d'%f+'^%d'%e*(e>1)
J, 72
Típico J. Dos personajes para hacer la mayor parte del trabajo, sesenta personajes para presentarlo.
Editar: se corrigió el recuento de caracteres.
fuente
161784
sea su entrada, sigue siendo 72 caracteres.|: __ q: y
?J,
5352 caracteresEsta solución toma el
rplc
truco de la solución de randomra pero también presenta algunas ideas originales.En notación no tácita, esta función se convierte en
donde
g
se define comoq: y
es el vector de factores primos dey
. Por ejemplo,q: 60
rendimientos2 2 3 5
.x u/. y
se aplicau
ay
keyed byx
, es decir,u
se aplica a vectores de elementosy
para los que las entradasx
son iguales. Esto es un poco complejo de explicar, pero en el caso especialy u/. y
ou/.~ y
,u
se aplica a cada vector de elementos distintos eny
, donde cada elemento se repite tantas veces como aparecey
. Por ejemplo,</.~ 1 2 1 2 3 1 2 2 3
rendimientos# y
es el recuento dey
, es decir, el número de elementos eny
.": y
formatosy
como una cadena.x , y
Anexax
yy
.{. y
es la cabezay
, es decir, su primer artículo.(": {. y), '^' , (": # y) , '*'
formatea un vector de n repeticiones de un número k en una cadena de la forma k ^ n *. Esta frase en notación tácita es:@{.,'^','*',~":@#
, que pasamos al adverbio/.
descrito más arriba.x rplc y
Es la función de la biblioteca reemplazar caracteres.y
tiene la formaa ; b
y cada instancia de secuenciaa
enx
se sustituye porb
.x
se desmorona (es decir, se reforma de tal manera que tenga rango 1) antes de que se realice la operación, que se utiliza aquí. Este código reemplaza^1*
con*
respecto a cumplir con el formato de salida de mandato.}: y
es la reducción dey
, es decir, todos menos su último elemento. Esto se utiliza para eliminar el final*
.fuente
__ q:
? Pruébalo en línea!PHP, 112
118
fuente
Python 119 Chars
fuente
JavaScript,
124122119fuente
Perl, 78
Utiliza la función s /// r de Perl 5.14 para eludir los ^ 1s. 81 caracteres para ejecutar en un bucle:
fuente
PHP, 236 caracteres
Salida para 131784: 2 ^ 3 * 3 * 17 ^ 2 * 19
Completa todos los números en unos pocos segundos durante la prueba.
La entrada nunca se especificó, por lo que elegí llamarla usando argumentos de línea de comando.
fuente
Scala 374:
sin golf:
fuente
J, 74 caracteres
64 caracteres con entrada en variable
x
:fuente
3 : 0
definición.3 : 0
versión, pero no funcionó de alguna manera. Aunque podría intentar tácito más tarde. Este es el 3: 0 que probé: pastebin.com/rmTVAk4j .y
como se supone que debes hacerlo?''
lugar dea:
en un solo lugar. Tal vez esa es la diferencia?Java 10,
109108bytes (función lambda) (no competitiva a petición de OP)Pruébalo en línea.
Java 6+, 181 bytes (programa completo)
Pruébalo en línea.
-1 byte gracias a @ceilingcat .
Explicación:
fuente
Japt ,
282726 bytes-1 byte gracias a Shaggy
Intentalo
fuente
Powershell,
11397 bytesInspirado por la respuesta de Joey . Es lento pero corto.
Script de prueba explicado:
Salida:
fuente
Jalea , 16 bytes (no compite a petición de OP)
Una de mis primeras respuestas de Jelly, por lo que definitivamente se puede jugar al golf (especialmente
³”=³
).Pruébalo en línea.
Explicación:
fuente
(non-competing)
. :)05AB1E ,
2220 bytes (no competidor a pedido de OP)-2 bytes gracias a @Emigna .
Pruébalo en línea.
Explicación:
fuente
1K
debería funcionar en lugar de `≠ iy en el bucle.APL (NARS), 66 caracteres, 132 bytes
prueba y comentario:
si alguien tiene mucho tiempo con estas primitivas, conócelas muy bien, para mí es posible que el código sea más claro de comentarios ... así que codifica más claro que comentarios, comentarios inútiles ...
fuente
JavaScript, 107
120
fuente
*
en la salida e imprime el exponente incluso si es 1.*
supone multiplicar por1
. Si es un problema tan grande, lo arreglaré.1
no debe imprimirse un exponente de . Y no, un rastro*
también está en contra de eso. Si uno pudiera elegir el formato de salida libremente,factor(1)
sería más fácil hacerlo . Las respuestas solo se pueden comparar razonablemente si todas resuelven el mismo problema.PHP , 112 bytes
Pruébalo en línea!
fuente
PHP, 93 bytes
Podría hacer 89 bytes con PHP 5.5 (o posterior), pero eso es posterior al desafío por más de 2 años:
Ejecutar como tubería
-nF
o probarlos en línea .fuente