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!


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


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

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.


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.



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







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.



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