El título lo dice todo. Dos entradas de enteros positivos de 32 bits m, n >= 2
, salida gcd(m,n)
en forma de factorización prima.
Entrada
Args de línea de comando o 1 línea de stdin bien, lo que sea mejor para el golf.
Salida
Espacio único delimitado con exponentes (sin espacios adicionales). No genera nada si las entradas son relativamente primas.
Ejemplos:
$ ./factorize 96 162
2^1 3^1
$ ./factorize 14 15
$ ./factorize 196 294
2^1 7^2
Reglas
- No puede utilizar recursos externos, bibliotecas matemáticas o funciones integradas para factorización o GCD. Ejemplos: Java, no
java.lang.Math
. rubí, noprime_division
, perl, nofactor
, etc.
gcd(n,m) == 1
?q:a+.b
o__ q:a+.b
en J usa noexternal resources or math libraries
, pero no lo publicaré, ya que está muy lejos del espíritu de la pregunta. Solo pensé en compartirlo aquí.Respuestas:
Python 3,
255250237226188180150142137136 caracteres¡Es increíble cuánto podría acortar esto simplemente saltando cosas (como, ya sabes, encontrar el mcd)! También podría reducir 10 caracteres más al hacer de esta una función que espera 2 ints, como algunas otras respuestas, en lugar de leer de stdin.
fuente
while g<a and g<b:
awhile(g<a)*(g<b):
a%g+b%g
bitselse:g+=1
podría serg+=1
, a menos que me falte algo.Rubí
16811711410110097Editar: Después de pensarlo, me di cuenta de que no necesitaba el tamiz ya que la primalidad del factor se cuida en el ciclo de factorización. Además, según lo informado por las respuestas de otros (los de Laindir y Tal son los que lo había visto, aunque parece que otros también lo han hecho), eliminó el cálculo de mcd por separado, ya que eso también ocurre en la factorización.
Edición 2: no es necesario
do
.Edición 3: exprimiéndolo más.
Edición 4: Sacó un espacio más.
Edición 5: en
upto
lugar deeach
;?^ == "^"
!Salida (igual después de editar):
Ciertamente podría mejorarse, pero no está mal para mi primero.
fuente
map{|i|i.to_i}
amap &:to_i
. Puede eliminar un quinto byte sin contar la nueva línea al final del archivo; Ruby funciona sin ella.$*
lugar deARGV
.Python 2 -
254252196185156151134126121Interprete
repl.it
Entrada de ejemplo - stdin
Ejemplo de salida - stdout
fuente
…`a`+'^'+`f.count(a)`…
?f.append(i)
porf+=[i]
para guardar 5 caracteres.f=''
sigue ahí?)Java -
184175Esto está inspirado en la respuesta de @Geobits (y un poco de la respuesta de @ Tal), pero suficiente de eso es diferente que decidí crear mi propia respuesta.
Arnés de prueba sin protección (tipo de) con (verificación humana):
fuente
cc, 96 bytes
Lee una línea de entrada estándar. Su salida no termina con una nueva línea. (EDITAR: también genera un espacio adicional después de cada factorización. Algunas de las otras respuestas recortan el espacio, pero esta no).
Ejemplo:
Código con comentarios:
fuente
PowerShell - 82
fuente
2..$a
Canaliza el rango en un bucle Foreach-Object%{...}
. El bucle recoge los valores deif($p){"$_^$p"}
.JavaScript (borrador de ECMAScript 6) - 89 caracteres
Convierte la respuesta original (iterativa), a continuación, en una respuesta recursiva.
Explicación
Respuesta iterativa: JavaScript (ECMASCript 6) -
108 (o 121)98 caracteresVersión 2:
Versión 1:
Respondiendo la pregunta como se preguntó originalmente:
O para cumplir con los cambios de la regla después del hecho:
Explicación
Salida
fuente
f(158,237)
favor" 79^1"
filter()
llamada?Perl 6: 90 caracteres, 94 bytes.
Algo de golf y comentó:
El uso es como:
fuente
Perl,
1441331181149793Versión sin golf:
Literalmente, comencé a aprender Perl solo para responder esta pregunta (este es mi primer código Perl), por lo que sospecho que esto se puede reducir aún más.
fuente
foreach
siempre es sinónimofor
de Perl 5, por lo que debería cortar 4 caracteres :)Java:
247241Realiza un seguimiento de los factores en una matriz y los imprime en un bucle.
Tamaño decente para Java, parece.
fuente
int
, pierde 4 en elint
pero las recupera connew int[
->new Integer[
por lo que es un lavado.n%i<1&&m%i<1
an%i+m%i<1
.()
. Sin==m
, por defecto será dem+1
todos modos.m/=i;i=1;
conm/=i--;
Se ejecutará más rápido también :)for
bucle?JavaScript (ECMAScript 5)
170164163113No pude resistirme a seguir el liderazgo de MT0. Había considerado la recurrencia antes, pero me había parecido demasiado fácil equivocarme. Y realmente lo es. La más mínima variación destruye todo.
Hay un violín para quienes gustan de los violines.
Sin golf:
Versión antigua
Sin golf:
Aquí hay algunas pruebas:
fuente
f(301343045, 421880263);
probablemente porque mi navegador no me permite recurrir tan profundo. Estúpido Firefox roto!GolfScript, 68 bytes
Tenga en cuenta que este enfoque requiere O (b 2 ) tiempo y espacio para los enteros "a" y "b".
A costa de un byte adicional, "solo" O (b) tiempo y espacio son necesarios:
Cómo funciona
fuente
Pitón 3 (123)
Utiliza básicamente la misma estructura que la respuesta de Tal .
Es suficiente recorrer hasta p = a-1, ya que incrementamos inmediatamente para obtener p = a y a> = min (a, b). Si b> a, no hay daño en probar valores inútiles de p por encima de a.
En 2.X, creo que podríamos ahorrar caracteres mediante la impresión de cada pieza como lo conseguimos en lugar de acumular una cadena:
if c:print'%d^%d'%(p,c),
. Python 3, desafortunadamente, no parece tener una forma compacta de imprimir sin una nueva línea final.fuente
PHP, 96
fuente
p=0;g+=1
en una línea comenzandog
en 1, lo que le permite hacer eng<a
lugar de hacerlog<=a
. Espero que te guste Python.awk -
1151119685La nueva versión solo puede manejar una línea de entrada. Gracias a durron597 por señalar que solo necesito asegurarme
i <= $1
.Sin golf:
Anteriormente podía tomar pares de números repetidamente
Sin golf:
fuente
&&i<=b
?i > b
, entoncesb % i != 0
... gracias :)NF=0;
no puede eliminar $ 1 y $ 2. La salida deecho 301343045 421880263 | awk -f factorize.awk | sed 's/ */ /g'
es5 7 1021^1 59029^1
porque $ 1 es 5 y $ 2 es 7. El sed exprime los espacios adicionales que provienen de la impresión de $ 1022, $ 1023, $ 1024, ..., $ 59028 como cadenas vacías unidas por espacios.$0=z;
$0=z;
es el mismo número de personajes queNF=0;
. Si$0=z;
fuera más largo, te diría que te quedesNF=0;
.Pip , 41 bytes
No es una respuesta competitiva, ya que el lenguaje es más nuevo que la pregunta. Pero esa marca GolfScript de 68 tenía que bajar.
La salida termina en un espacio; si eso es un problema, la siguiente versión también tiene 41 bytes (incluida la
-s
bandera):Formateado, con explicaciones:
Pip, a diferencia de GolfScript, CJam, et al. es un lenguaje imperativo con operadores infijos; También se inspira en los lenguajes de programación de matriz. Esta tarea muestra muy bien ambos paradigmas en el trabajo.
(Tenga en cuenta que se necesita la confirmación 2015-4-20 para ejecutar esto, ya que solo solucioné un par de errores).
fuente
Python 2 - 262 bytes
La línea 6 necesita trabajo.
fuente
…`a`+'^'+`f.count(a)`…
?Groovy: 174 caracteres
Este es un puerto de la solución de Geobits para Groovy 2.2.1:
Aquí está la versión sin golf:
fuente
R: 139
Con hendiduras:
Uso:
fuente