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:
83891573479027823458394579234582347590825792034579235923475902312344444Salidas:83891573479027823458394579234582347590825792034579235923475902312344444 = 2^2 * 3^2 * 89395597 * 98966790508447596609239 * 263396636003096040031295425789508274613fuente
Ruby 1.9,
7470 caracteresEdiciones:
exponent > 1fuente
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\Kmetacarácter regex.fuente
factor.popció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
161784sea su entrada, sigue siendo 72 caracteres.|: __ q: y?J,
5352 caracteresEsta solución toma el
rplctruco 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
gse define comoq: yes el vector de factores primos dey. Por ejemplo,q: 60rendimientos2 2 3 5.x u/. yse aplicauaykeyed byx, es decir,use aplica a vectores de elementosypara los que las entradasxson iguales. Esto es un poco complejo de explicar, pero en el caso especialy u/. you/.~ y,use 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 3rendimientos# yes el recuento dey, es decir, el número de elementos eny.": yformatosycomo una cadena.x , yAnexaxyy.{. yes 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 yEs la función de la biblioteca reemplazar caracteres.ytiene la formaa ; by cada instancia de secuenciaaenxse sustituye porb.xse 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.}: yes 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 : 0definición.3 : 0versió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 .ycomo 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
1Kdeberí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é.1no 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
-nFo probarlos en línea .fuente