Primes en la factorización prima

9

Vi venir otro gran desafío en PPCG, y realmente me encantan algunos primos. Luego leí mal el texto introductorio, y me pregunté qué habían creado los cerebros creativos aquí.

Resulta que la pregunta planteada era trivial, pero me pregunto si lo mismo puede decirse de la pregunta que leí (mal):


6 puede representarse con 2 ^ 1 * 3 ^ 1, y 50 puede representarse con 2 ^ 1 * 5 ^ 2 (donde ^ indica exponencia).

Tu tarea:

Escriba un programa o función para determinar cuántos primos distintos hay en esta representación de un número.

Entrada:

Un número entero n tal que 1 <n <10 ^ 12, tomado por cualquier método normal.

Salida:

El número de primos distintos que se requieren para representar los factores primos únicos de n.

Casos de prueba:

Input      Factorisation      Unique primes in factorisation representation
24         2^3*3^1            2 (2, 3)
126        2^1*3^2*7^1        3 (2, 3, 7)
8          2^3                2 (2, 3)
64         2^6                1 (2) (6 doesn't get factorised further)
72         2^3*3^2            2 (2, 3)
8640       2^6*3^3*5^1        3 (2, 3, 5)
317011968  2^11*3^5*7^2*13^1  6 (2, 3, 5, 7, 11, 13)
27         3^3                1 (3)

Esta no es una secuencia OEIS.

Puntuación:

Este es el , ¡la puntuación más baja en bytes gana!

pbeentje
fuente
¿Para qué es el resultado esperado 64? ¿Es 2 (2,3)(ya que 6 puede representarse como 2 * 3) o 1 (2)(ignora el 6)?
Emigna
para 64el resultado esperado es 1 (2). Me gusta la idea de hacerlo de forma recursiva, pero esa no es la forma en que leo la pregunta original. Pensé que 8640era un caso de prueba adecuado, pero debería haber sido más explícito, gracias.
pbeentje
Afirma que esta no es una secuencia OEIS. ¿No es A001221, los valores de la función omega (pequeña)?
Gray Taylor
A001221 es similar, pero comienza a divergir en los términos 8 y 9 (aquí 2, A001221 1) debido a la inclusión del exponente como primo en este ejercicio.
pbeentje
Ah, ya veo. Escriba la factorización prima, luego vea cuántos primos diferentes escribí (independientemente del papel que desempeñaron). Me pregunto qué pasará si va un paso más allá y factoriza el exponente ...
Gray Taylor

Respuestas:

5

Mathematica, 39 bytes

Count[Union@@FactorInteger@#,_?PrimeQ]&

Pruébalo en línea!

gracias a Martin Ender (-11 bytes)

J42161217
fuente
Casesresulta ser más corto que Select(-4 bytes): Tr[1^Union@Cases[FactorInteger@#,_?PrimeQ,2]]&(pasa todos los casos de prueba en un núcleo nuevo)
JungHwan Min
¿Qué tal Count[Union@@FactorInteger@#,_?PrimeQ]&? (No he verificado todos los casos de prueba)
Martin Ender
@MartinEnder parece que debería funcionar. Pasa todos los casos de prueba también.
JungHwan Min
5

05AB1E , 9 7 bytes

Guardado 2 bytes gracias a Kevin Cruijssen

ÓsfìÙpO

Pruébalo en línea!

Explicación

Ó        # push the prime factor exponents of the input
 sfì     # prepend the prime factors of the input
    Ù    # remove duplicates
     p   # check each if it is prime
      O  # sum
Emigna
fuente
1
-1 byte usando €pOdespués de fusionar los factores primos y exponentes:ÓsfìÙ€pO
Kevin Cruijssen
@KevinCruijssen: ¡Gracias! En realidad guarda 2 ya que no es necesario.
Emigna
Ah, por supuesto ... Wow, no estoy seguro de cómo me perdí eso, jaja xD
Kevin Cruijssen
4

Gaia , 6 bytes

ḋ_uṗ¦Σ

Pruébalo en línea!


  • calcula la factorización prima, como pares [primo, exponente] .

  • _ aplana la lista.

  • u elimina elementos duplicados.

  • ṗ¦asigna a través de los elementos y devuelve 1 si se encuentra un primo, 0 de lo contrario.

  • Σ resume la lista.

Sr. Xcoder
fuente
3

CJam (13 bytes)

{mFe__&:mp1b}

Conjunto de pruebas en línea

Esto es bastante sencillo: obtener primos con multiplicidades, reducir a valores distintos, filtrar primos, contar.

Lamentablemente, Martin señaló algunos casos que no fueron manejados por el truco ligeramente interesante en mi respuesta original, aunque también proporcionó un ahorro de 1 byte al observar que dado mpda 0o 1puede ser mapeado en lugar de filtrado.

Peter Taylor
fuente
2

Ohm v2 , 6 5 bytes

-1 byte gracias a @ Mr.Xcoder

ä{UpΣ

Pruébalo en línea!

Cinaski
fuente
5 bytes:ä{UpΣ
Sr. Xcoder
@ Mr.Xcoder Gracias! Estaba buscando ese incorporado pero no pude encontrarlo ..
Cinaski
1

En realidad , 7 bytes

w♂i╔♂pΣ

Pruébalo en línea!

Explicación:

w♂i╔♂pΣ
w        factor into [prime, exponent] pairs
 ♂i      flatten to 1D list
   ╔     unique elements
    ♂p   for each element: 1 if prime else 0
      Σ  sum
Mego
fuente
1

Python 2 , 142 135 119 bytes

f=lambda n,d=2:n-1and(n%d and f(n,d+1)or[d]+f(n/d))or[]
p=f(input())
print sum(f(n)==[n]for n in set(p+map(p.count,p)))

Pruébalo en línea!

ovs
fuente
1

Brachylog , 7 bytes

ḋọcdṗˢl

Pruébalo en línea!

           The output
      l    is the length of
  c        the concatenated
 ọ         list of pairs [value, number of occurrences]
ḋ          from the prime factorization of
           the input
   d       with duplicates removed
    ṗˢ     and non-primes removed.

Una divertida versión de 9 bytes: ḋọ{∋∋ṗ}ᶜ¹

Cadena no relacionada
fuente
0

Números R +, 92 bytes

function(n)sum(1|unique((x=c((r=rle(primeFactors(n)))$l,r$v))[isPrime(x)]))
library(numbers)

Pruébalo en línea!

Giuseppe
fuente
0

J, 20 bytes

3 :'+/1 p:~.,__ q:y'

Contada a mano jajaja, así que dime si esto está apagado.

¿Alguna sugerencia de golf?

Presentación aburrida: aplanar la tabla de factorización prima y contar primos.

col
fuente
0

Javascript (ES6), 145 bytes

n=>{for(a=[b=l=0],q=n,d=2;q>=2;)q%d?(b&&(a.push(0),l++),d++,b=0):(q/=d,a[l]++,b=1);for(i in a){for(d=1,e=a[i];e%d;d++);e-d||n%e&&l++};return l+1}
Naruyoko
fuente