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.




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:



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

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

@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

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.

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).


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

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.

2

Mathica 46 bytes

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

Pruébalo en línea!


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);



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.


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 -))


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 //@, ///@, ...

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.