Una forma de representar un número natural es multiplicando exponentes de números primos. Por ejemplo, 6 puede representarse con 2 ^ 1 * 3 ^ 1, y 50 puede representarse con 2 ^ 1 * 5 ^ 2 (donde ^ indica exponencia). El número de números primos en esta representación puede ayudar a determinar si es más corto usar este método de representación, en comparación con otros métodos. Pero debido a que no quiero calcularlos a mano, necesito un programa que lo haga por mí. Sin embargo, como tendré que recordar el programa hasta que llegue a casa, debe ser lo más breve posible.
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 la entrada, como se describe en la introducción.
Casos de prueba:
24 -> 2 (2^3*3^1)
126 -> 3 (2^1*3^2*7^1)
1538493 -> 4 (3^1*11^1*23^1*2027^1)
123456 -> 3 (2^6*3^1*643^1)
Este es OEIS A001221 .
Puntuación:
Este es el código de golf , ¡la puntuación más baja en bytes gana!
Respuestas:
MATL ,
43 bytes-1 byte gracias a Luis Mendo
Pruébalo en línea!
Respuesta original:
Pruébalo en línea!
Una muy buena
Yfun
respuesta.fuente
05AB1E , 2 bytes
otra respuesta bastante aburrida ...
Un programa completo que acepta una entrada numérica e imprime el resultado.
Pruébalo en línea!
¿Cómo?
fuente
Mathematica, 7 bytes
Sí, hay un incorporado.
Mathematica, 21 bytes
El largo camino alrededor.
fuente
Length@FactorInteger
mismo?Length@*FactorInteger
produce una función pura: la composición deLength
yFactorInteger
. Puedo definirfun=Length@*FactorInteger
y luego llamarfun[1001]
. Por otro lado,Length@FactorInteger
significaríaLength[FactorInteger]
y evaluaría0
.Gaia , 2 bytes
Otra respuesta bastante aburrida ... --- J. Allan
Pruébalo en línea!
ḋ
- Factorización prima como pares [primo, exponente] .l
- Longitud.fuente
Python 2, 56 bytes
fuente
Retina ,
3130 bytesLa entrada está en unario.
¡Gracias a @MartinEnder por jugar al golf de 1 byte!
Pruébalo en línea! (incluye convertidor decimal a unario)
Cómo funciona
Dado que el programa consiste en una expresión regular única con el
&
modificador, Retina simplemente cuenta la cantidad de coincidencias superpuestas . Se supone que la entrada consiste en n repeticiones de 1 y nada más.La anticipación negativa
coincide en ubicaciones entre 1 's que no son seguidas por dos o más 1 ' s (
11+
), seguidas de una o más repeticiones de la misma cantidad de 1 's (\1+
), seguidas por el final de input ($
).Cualquier número compuesto ab con a, b> 1 puede escribirse como b repeticiones de una repetición de 1 , por lo que la búsqueda anticipada solo coincide con las ubicaciones seguidas de p repeticiones de 1 , donde p = 1 o p es primo.
La expresión regular
se asegura de que p> 1 requiera al menos dos 1 's (
11+
) y almacena la cola de 1 ' s en el segundo grupo de captura (\2
).Finalmente, la mirada positiva detrás
verifica que toda la entrada consiste en kp ocurrencias ( k ≥ 1 ) de 1 , verificando que p divide la entrada.
Por lo tanto, cada coincidencia corresponde a un único divisor primo p .
fuente
Bash + GNU utilidades, 33
Pruébalo en línea .
Explicación
fuente
grep -Po ' \d+'
guarda un byte encimatr \ \\n|sed 1d
.grep -Po '( \d+)\1*'
falla la entrada 46 .Jalea , 3 bytes
una respuesta bastante aburrida ...
Un enlace monádico que toma un número y devuelve un número
Pruébalo en línea!
¿Cómo?
fuente
Æv
?Æ
es el código alternativo 0198. 2. Puede configurar un teclado (no lo he hecho). 3. La página de códigos.Ohm v2 , 2 bytes
Pruébalo en línea!
Los dos elementos integrados están uno al lado del otro en la documentación jajaja.
fuente
Jalea , 2 bytes
Otra respuesta bastante aburrida ... --- J. Allan
Pruébalo en línea!
Un incorporado.
fuente
Alice , 10 bytes
Pruébalo en línea!
Explicación
Este es solo el marco estándar para programas aritméticos pesados lineales que necesitan E / S decimal. El programa en sí mismo es simplemente:
Que hace:
fuente
JavaScript 45 bytes
* Para @SEJPM solicite una explicación: lo que estoy haciendo aquí es esto: voy de 2 - n (que cambia, y eventualmente será el factor primo más grande) - ahora si el número actual se divide ni quiero contarlo solo una vez (incluso aunque puede ser un factor de 2 * 2 * 2 * 3 - 2 se cuenta una vez), por lo que la "j" aparece en la imagen, cuando j no se especifica en la llamada de la función - j recibirá el valor de " undefined ", y cuando n% i == 0 llamo a la función con j = 1 en la siguiente llamada) - y luego solo agrego 1 cuando j es igual a undefined, que es! j + Función (n / i, i, ( j = 1 o solo 1)). No cambio i en este asunto porque aún puede ser divisible por i nuevamente (2 * 2 * 3) pero luego j será igual a 1 y no contará como factor. Espero haberlo explicado lo suficientemente bien.
si el último primo es muy grande, tendrá una pila máxima de llamadas; si es un problema, puedo hacer uno iterativo
fuente
CJam ,
75 bytes¡Gracias a Martin Ender por 2 bytes de descuento!
Bloque anónimo (función) que espera el número de entrada en la pila y lo reemplaza por el número de salida.
Pruébalo en línea! O verificar todos los casos de prueba .
Explicación
fuente
Brachylog , 3 bytes
Pruébalo en línea!
Explicación
fuente
Pyth, 3 bytes
Banco de pruebas
Longitud (
l
) del conjunto ({
) de factores primos (P
) de la entrada.fuente
Casco , 3 bytes
Pruébalo en línea!
Explicación
fuente
En realidad , 2 bytes
Otra respuesta bastante aburrida ... --- J. Allan
Pruébalo en línea!
El primer personaje puede ser reemplazado por
w
.fuente
Pyke , 3 bytes
Pruébalo aquí!
fuente
Python 3 ,
6867 bytes1 byte eliminado gracias a @ Mr.Xcoder
Esto agota el tiempo para los casos de prueba más grandes. Pruébalo en línea!
fuente
Números R +,
3014 bytes16 bytes eliminados gracias a @Giuseppe
Además, aquí está el ¡ Pruébalo en línea! enlace por @Giuseppe.
fuente
f=function(x)
y el(x)
como yanumbers::omega
es una función. Sin embargo, comonumbers
no es estándar para R, debe responder "Números R +". Además, debe incluir un enlace TIO . Aún así, +1, muy agradable.MATL
solución es muy buena (+1 ayer).numbers::
. De lo contrario, para mí es lo mismo que usar unimport
en cualquier otro idioma.Convexo , 3 bytes
Pruébalo en línea!
fuente
Pari / GP , 5 bytes
No sé por qué se llama nu en Mathematica pero omega en Pari / GP.
Pruébalo en línea!
fuente
Haskell , 58 bytes
-4 bytes gracias a @Laikoni
Pruébalo en línea!
Explicación
Esencialmente genera todos los primos como máximo
n
y los filtra por ser un factor de n y luego toma la longitud del resultado.fuente
sum[1|x<- ... ]
lugar delength
.Japt,
54 bytesIntentalo
Obtenga los divisores (
â
) y cuente (è
) los primos (j
).fuente
ARBLE , 28 bytes
Pruébalo en línea!
Esta es una solución muy literal.
fuente
Dyalog APL , 17 bytes
Pruébalo en línea!
fuente
Python 2 ,
6355 bytesUna respuesta mucho más interesante ...
-8 bytes gracias a Jonathan Frech (¡use un argumento con un valor predeterminado para el ajuste posterior del resultado de primos de
0
a1
- mucho mejor que una lambda envolvente!)Una función recursiva que toma un entero positivo
n
, y devuelve un entero positivo, el conteo.Pruébalo en línea! Realmente ineficiente, ni siquiera se moleste con los otros casos de prueba.
fuente
J, 12 bytes
q:
es la función de exponentes primos de J, dándole el argumento__
produce una matriz cuya primera fila son todos factores primos distintos de cero y cuya segunda fila son sus exponentes.Tomamos la forma
$
de esa matriz, filas por columnas, el número de columnas es la respuesta que buscamos.{:
nos da el último elemento de esta lista de dos elementos (filas numéricas, columnas numéricas) y, por lo tanto, la respuesta.Pruébalo en línea!
fuente
Java (OpenJDK 9) , 67 bytes
Pruébalo en línea!
fuente
Javascript ES6, 56 caracteres
Prueba:
fuente