Factorización mutua mutuamente máxima

14

Definiciones

  • Dos números son primos si su único divisor común positivo es 1.
  • Una lista de números es primo mutuo si cada par de números dentro de esa lista es primo entre sí.
  • Una factorización de número nes una lista de números cuyo producto es n.

Tarea

Dado un número positivo n, genere la factorización mutuamente co-prima ncon la longitud máxima que no incluye 1.

Ejemplo

Para n=60, la respuesta es [3,4,5], porque 3*4*5=60y ninguna otra factorización mutuamente coprima sin 1tiene una longitud mayor o igual a 3la longitud de la factorización.

Reglas y libertades

  • Puede usar cualquier formato de entrada / salida razonable.
  • Las entradas en la lista de salida no necesitan ser ordenadas.

Casos de prueba

n   output
1   []
2   [2]
3   [3]
4   [4]
5   [5]
6   [2, 3]
7   [7]
8   [8]
9   [9]
10  [2, 5]
11  [11]
12  [3, 4]
13  [13]
14  [2, 7]
15  [3, 5]
16  [16]
17  [17]
18  [2, 9]
19  [19]
20  [4, 5]
21  [3, 7]
22  [2, 11]
23  [23]
24  [3, 8]
25  [25]
26  [2, 13]
27  [27]
28  [4, 7]
29  [29]
30  [2, 3, 5]
31  [31]
32  [32]
33  [3, 11]
34  [2, 17]
35  [5, 7]
36  [4, 9]
37  [37]
38  [2, 19]
39  [3, 13]
40  [5, 8]
41  [41]
42  [2, 3, 7]
43  [43]
44  [4, 11]
45  [5, 9]
46  [2, 23]
47  [47]
48  [3, 16]
49  [49]
50  [2, 25]
51  [3, 17]
52  [4, 13]
53  [53]
54  [2, 27]
55  [5, 11]
56  [7, 8]
57  [3, 19]
58  [2, 29]
59  [59]
60  [3, 4, 5]
61  [61]
62  [2, 31]
63  [7, 9]
64  [64]
65  [5, 13]
66  [2, 3, 11]
67  [67]
68  [4, 17]
69  [3, 23]
70  [2, 5, 7]
71  [71]
72  [8, 9]
73  [73]
74  [2, 37]
75  [3, 25]
76  [4, 19]
77  [7, 11]
78  [2, 3, 13]
79  [79]
80  [5, 16]
81  [81]
82  [2, 41]
83  [83]
84  [3, 4, 7]
85  [5, 17]
86  [2, 43]
87  [3, 29]
88  [8, 11]
89  [89]
90  [2, 5, 9]
91  [7, 13]
92  [4, 23]
93  [3, 31]
94  [2, 47]
95  [5, 19]
96  [3, 32]
97  [97]
98  [2, 49]
99  [9, 11]

Puntuación

Este es el . La respuesta más corta en bytes gana.

Monja permeable
fuente
OEIS para la secuencia aplanada. (Con un guión 1.)
Martin Ender
Reto de seguimiento más difícil: solo los pares adyacentes en la lista resultante deben ser primos.
Martin Ender
44
¿Es esto solo una factorización en potencias primarias?
Paŭlo Ebermann
1
@ PaŭloEbermann sí, lo es.
Leaky Nun

Respuestas:

10

Matemáticas , 24 bytes.

#^#2&@@@FactorInteger@#&

Pruébalo en línea!

Martin Ender
fuente
55
#^#2&@@@FactorInteger@#&[1]vuelve {1}en Mathematica. Pero funciona en matemáticas.
alephalpha
@alephalpha Gracias, ni siquiera se me habría ocurrido ver si Mathics se implementa de manera FactorIntegerdiferente. :)
Martin Ender
9

Brachylog , 4 bytes

ḋḅ×ᵐ

Pruébalo en línea!

Explicación

       # output is the list of
  ×ᵐ   # products of each
 ḅ     # block of consecutive equal elements
ḋ      # of the prime factors
       # of the input
Emigna
fuente
2
¡Felicidades por tu primera respuesta Brachylog! ... al menos eso creo?
Fatalize
1
@Fatalize: Mi segundo, creo. Tenía este de antes. Definitivamente el más corto :)
Emigna
5

05AB1E , 3 5 bytes

+2 bytes para arreglar el caso límite de 1. Gracias a Riley por el parche (y por la suite de prueba, ¡mi 05ab1e no es tan fuerte!)

ÒγP1K

Test suite en Pruébelo en línea!

¿Cómo?

Ò     - prime factorisation, with duplicates
 γ    - split into chunks of consecutive equal elements
  P   - product of each list
   1  - literal one
    K - removed instances of top from previous
      - implicitly display top of stack
Jonathan Allan
fuente
@Adnan, ¿es ese el mejor enlace para "bytes" o hay una página de código formateada en alguna parte?
Jonathan Allan
Sí, hay una página de códigos que muestra todos los bytes.
Adnan
1
Oh, cómo lo extrañé> _ <Muchas gracias :)
Jonathan Allan
No funciona para 1.
Leaky Nun
@LeakyNun arreglado con ayuda :)
Jonathan Allan
3

CJam , 9 bytes

{mF::#1-}

Pruébalo en línea!

Simplemente separa la entrada en sus potencias primarias constituyentes y elimina 1s (solo es necesario para la entrada 1).

Martin Ender
fuente
3

Haskell , 51 bytes

(2#) es una función anónima que toma un número entero y devuelve una lista.

Usar como (2#) 99.

m#n|m>n=[]|x<-gcd(m^n)n=[x|x>1]++(m+1)#div n x
(2#)

Pruébalo en línea!

Inspirado por el truco de poder que algunas personas usaron en el reciente desafío de números cuadrados libres .

  • m#ngenera factores de n, comenzando con m.
  • Si m>nnos detenemos, concluimos que ya hemos encontrado todos los factores.
  • x=gcd(m^n)nes el factor más grande de ncuyos factores primos están todos m. Tenga en cuenta que debido a que los más pequeños mse prueban primero, esto será1 menos que msea ​​primo.
  • Incluimos xen la lista resultante si no es 1, y luego repetimos con el siguiente m, dividiendo npor x. Tenga en cuenta que xy div n xno puede tener factores comunes.
  • (2#)toma un número y comienza a encontrar sus factores 2.
Ørjan Johansen
fuente
3

MATL , 7 bytes

&YF^1X-

Pruébalo en línea! O verificar todos los casos de prueba .

Explicación

Considere la entrada 80 como un ejemplo.

&YF    % Implicit input. Push array of unique prime factors and array of exponents
       % STACK: [2 3 5], [4 0 1]
^      % Power, element-wise
       % STACK: [16 1 5]
1      % Push 1
       % STACK: [16 1 5], 1
X-     % Set difference, keeping order. Implicitly display
       % STACK: [16 5]

EDITAR (9 de junio de 2017): YFcon dos salidas se ha modificado en la versión 20.1.0 : los primos sin factor y sus exponentes (cero) se omiten. Esto no afecta el código anterior, que funciona sin requerir ningún cambio (pero 1X-podría eliminarse).

Luis Mendo
fuente
Supongo que el cambio significa que 1X-es redundante en la nueva versión ... también, eso parece una diferencia establecida en lugar de una intersección para mí.
Ørjan Johansen
@ ØrjanJohansen Correcto en ambos. ¡Gracias!
Luis Mendo
2

Jalea , 5 bytes

ÆF*/€

Test suite en Pruébelo en línea!

¿Cómo?

ÆF*/€ - Main link: n
ÆF    - prime factors as [prime, exponent] pairs
   /€ - reduce €ach with:
  *   - exponentiation
Jonathan Allan
fuente
Una solución de 6 bytes se alternan en un intento de encontrar otro método que empataría con el suyo (por desgracia no): ÆfŒgZP. Tiene la misma cantidad de fichas pero demasiados átomos de dos bytes;)
HyperNeutrino
... y al igual que mi entrada eliminada 05ab1e, devuelve 1 una entrada 1que no está permitida (el efecto de realizar un producto vacío).
Jonathan Allan
:( Bueno, whoops, pasó por alto eso.
Maldición
2

Alice , 10 bytes

Ifw.n$@EOK

Pruébalo en línea!

Desafortunadamente, esto usa puntos de código como E / S entera nuevamente . El caso de prueba en el enlace TIO es la entrada 191808 que se descompone en 64 , 81 y 37 . Tenga en cuenta que esta solución imprime las potencias principales en orden de mayor a menor, por lo que obtenemos la salida %Q@.

Por conveniencia, aquí hay una solución de 16 bytes con E / S decimal que usa el mismo algoritmo central:

/O/\K
\i>fw.n$@E

Pruébalo en línea!

Explicación

Como las otras respuestas, esto descompone la entrada en poderes primarios.

I      Read a code point as input.
f      Compute its prime factorisation a prime/exponent pairs and push them
       to the stack in order from smallest to largest prime.
w      Remember the current IP position on the return address stack. This
       starts a loop.
  .      Duplicate the current exponent. This will be zero once all primes
         have been processed.
  n$@    Terminate the program if this was zero.
  E      Raise the prime to its corresponding power.
  O      Output the result as a character.
K      Return to the w to run the next loop iteration.
Martin Ender
fuente
2

Mathica 46 bytes

#[[1]]^#[[2]]&/@If[#==1,#={},FactorInteger@#]&

Pruébalo en línea!

J42161217
fuente
Buena respuesta, pero está dando resultados ligeramente incorrectos para algunos de los casos de prueba. Actualmente su código {}; {2}; {3}; {2}; {5}; {2,3}; {7}; {2}; {3}; {2,5}; {11}; {2,3}; {13}; ... sale pero debería salir en su {}; {2}; {3}; {4}; {5}; {2,3}; {7}; {8}; {9}; {2,5}; {11}; {4,3}; {13}; ...lugar.
Kevin Cruijssen
Creo que lo arreglé
J42161217
Parece trabajar en TIO de hecho. +1 Ah, y bienvenido a PPCG, veo que eres bastante nuevo aquí. Probablemente ya lo haya visto, pero si no, los consejos para jugar golf en Mathematica pueden ser interesantes de leer. ¡Disfruta tu estancia! :)
Kevin Cruijssen
1
Si se encuentra accediendo a los componentes de #más de #sí mismo, puede guardar muchos bytes usando Apply( @@@) en lugar de Map( /@):#^#2&@@@If...
Martin Ender
1

PHP, 62 bytes

imprime una matriz asociativa con la prima como clave y con qué frecuencia se usa la prima como valor y nada como entrada 1

for($i=2;1<$n=&$argn;)$n%$i?++$i:$n/=$i+!++$r[$i];print_r($r);

Pruébalo en línea!

Salida para 60

Array
(
    [2] => 2
    [3] => 1
    [5] => 1
)

PHP, 82 bytes

for($i=2;1<$n=&$argn;)$n%$i?++$i:$n/=$i+!($r[$i]=$r[$i]?$r[$i]*$i:$i);print_r($r);

Pruébalo en línea!

no imprime nada como entrada 1si desea una matriz vacía y una matriz ordenada será un poco más larga

for($r=[],$i=2;1<$n=&$argn;)$n%$i?++$i:$n/=$i+!($r[$i]=$r[$i]?$r[$i]*$i:$i);sort($r);print_r($r);
Jörg Hülsermann
fuente
1

En realidad , 6 bytes

w⌠iⁿ⌡M

Pruébalo en línea!

Explicación:

w⌠iⁿ⌡M
w       factor into [prime, exponent] pairs
 ⌠iⁿ⌡M  for each pair:
  i       flatten
   ⁿ      prime**exponent
Mego
fuente
0

miniML , 47 bytes

Los desafíos que implican la factorización prima están terriblemente sobre representados aquí, por lo que todos estamos tristemente obligados a tener la factorización en la biblioteca estándar.

fun n->map(fun p->ipow(fst p)(snd p))(factor n)

Tenga en cuenta que el 'mini' en miniml se refiere al tamaño del conjunto de características, no al tamaño del código fuente escrito en él.

Feersum
fuente
0

Ruby, 61 bytes

require 'prime'
->n{(2..n).select{|e|n/e.to_f%1==0&&e.prime?}}

Estoy realmente decepcionado después de buscar soluciones de 6-7 bytes -))

marmeladze
fuente
0

Mathematica, 24 bytes

Power@@@FactorInteger@#&

Lástima @@@*que no sea una cosa. Además, me gustaría /@*, @@*y, de hecho, el cambio @@@a /@@, //@a @@@, o lo que sea y añadir a la familia infinita de //@, ///@, ...

CalculadoraFeline
fuente