Introducción
La función de recuento de primos , también conocida como la función Pi , devuelve la cantidad de primos menor o igual que x.
Reto
Su programa tomará un entero x que puede suponer que es positivo y generará un solo entero igual a la cantidad de primos menor o igual a x. Este es un desafío de código de golf , por lo que el ganador será el programa con la menor cantidad de bytes.
Puede usar cualquier idioma de su elección siempre que existiera antes de que este desafío surgiera, pero si el idioma tiene una función de conteo primo incorporada o una función de comprobación de primalidad (como Mathematica), esa función no se puede usar en su código .
Entradas de ejemplo
Entrada:
1
Salida:
0
Entrada:
2
Salida:
1
Entrada:
5
Salida:
3
Respuestas:
05AB1E , 3 bytes
Esto supone que los factores integrados de factorización están permitidos. Pruébalo en línea!
Cómo funciona
fuente
Python 2, 45 bytes
Utiliza el generador principal del teorema de Wilson . El producto
p
rastrea(k-1)!^2
, yp%k
es 1 para primos y 0 para no primos.fuente
MATL ,
11, 10, 8, 5 bytesPruébalo en línea!
Escribí una versión que tenía una explicación genial de cómo funcionan las matrices de MATL:
:YF!s1=1
Pero ya no es relevante. Consulte el historial de revisiones si desea verlo.
Nueva explicación:
Tres bytes guardados gracias a la genial solución de Dennis
fuente
YF!s1=s
Jalea ,
85 bytes¡3 bytes guardados gracias a @Dennis!
Pruébalo en línea!
Puerto de la respuesta MATL de DJMcMayhem (versión anterior) refinada por Dennis.
fuente
ÆE
, ya que cada exponente corresponde a un factor primo diferente.RÆESL
logra eso.!ÆEL
Sería aún más corto.Plantillas MediaWiki con ParserFunctions , 220 + 19 = 239 bytes
Para llamar a la plantilla:
Dispuesto en estilo Lisp:
Solo una prueba de primalidad básica de 2 a n . Los números con tres llaves alrededor son las variables, donde
{{{1}}}
es n ,{{{2}}}
es el número que se está probando,{{{3}}}
es el factor a verificar.fuente
Perl, 33 bytes
Incluye +1 para
-p
Dar el número de entrada en STDIN
primecount.pl
Da el resultado incorrecto
0
pero está bien, el operador solicitó soporte solo para enteros positivos.fuente
Retina, 31 bytes
El recuento de bytes asume la codificación ISO 8859-1. Convierta la entrada a unario, genere el rango de
1
an
, cada uno en su propia línea. Une los primos.Pruébelo en línea : la entrada es mucho mayor que 2800, ya sea tiempo de espera o se queda sin memoria.
Referencias
Generador de rango de Martin
El inspector principal de Martin
fuente
Jalea , 3 bytes
Pruébalo en línea!
Cómo funciona
fuente
Gelatina ,
13 11 10 9 8 76 bytesSin utilizar funciones primarias incorporadas de ningún tipo
-1 byte gracias a @miles (use una tabla)
-1 byte gracias a @Dennis (convertir de unario para contar los divisores)
TryItOnline
O vea los primeros 100 términos de la serie
n=[1,100]
, también en TryItOnline¿Cómo?
fuente
%þ`¬Sċ2
utilizando una tabla de residuos.ḍþḅ1ċ2
Guarda un byte.JavaScript (ES6),
4543 bytesUna modificación de mi función de primalidad de
363533 bytes (1 byte guardado por @Neil, 2 por @Arnauld):(No puedo publicar esto en ningún lado porque ¿Es este número primo? Solo acepta programas completos ...)
Fragmento de prueba
Mostrar fragmento de código
fuente
&
en el medio de su función de primalidad.PowerShell v2 +, 98 bytes
Precaución: Esto es lento para entradas grandes.
Básicamente la búsqueda unaria de ¿Es este número un primo? , junto con un
for
bucle y un$j++
contador. Una pequeña lógica adicional en el frente para tener en cuenta la entrada de casos extremos1
y2
, debido a cómo funciona la valla en losfor
bucles.fuente
05AB1E , 5 bytes
Asume que se permiten las incorporaciones de factorización prima.
Código:
Explicación:
Utiliza la codificación CP-1252 . Pruébalo en línea!
fuente
ÅPg
es lo que sería ahora, ¿verdad?CJam , 7 bytes
Pruébalo en línea! Utiliza una función de factorización.
Explicación:
fuente
Jalea , 6 bytes
Esto usa solo aritmética básica y el teorema de Wilson. Pruébalo en línea! o verificar todos los casos de prueba .
Cómo funciona
fuente
C # 5.0
7877Sin golf
fuente
Pyth -
76 bytesDado que otros están utilizando funciones de factorización prima ...
Test Suite .
fuente
Bash + coreutils, 30
Ideona
Bash + coreutils + paquete de juegos BSD, 22
Esta respuesta más corta requiere que tenga instalado el paquete bsdgames:
sudo apt install bsdgames
.fuente
Pyke,
86 bytesPruébalo aquí!
Gracias a Maltysen por el nuevo algoritmo.
fuente
C #, 157 bytes
Programa completo con casos de prueba:
Comienza a tomar un tiempo una vez que superas el millón.
fuente
Matlab, 60 bytes
Continuando mi apego a las funciones de una línea de Matlab. Sin utilizar una factorización incorporada:
Dado que un primo
y
solo tiene dos factores[1,y]
: contamos los números en el rango[1,x]
que tienen solo dos factores.El uso de la factorización permite un acortamiento significativo (hasta 46 bytes).
Conclusión: Necesidad de examinarlos idiomas de golf: D
fuente
En realidad, 10 bytes
Esta fue la solución más corta que encontré que no se encontró con errores de interpretación en TIO. Sugerencias de golf bienvenidas. Pruébalo en línea!
No golfista
fuente
Jalea , 3 bytes
Jelly tiene una función de recuento de cebado integrada
ÆC
y una función de verificación de cebadoÆP
; en su lugar, utiliza una función de generación de cebado incorporadaÆR
y toma la longitudL
.Supongo que esto es casi tan limítrofe como el uso de factores integrados primos de factorización, que también tomaría 3 bytes con
!Æv
(!
factorial,Æv
factores primos de recuento)fuente
PHP,
9692 bytesGuardado 4 bytes gracias a Roman Gräf
Prueba en línea
Código de prueba sin golf:
Prueba en línea
fuente
isInt(...)?1:0
y no solo?isInt(...)
APL (Dyalog Unicode) , SBCS de 13 bytes
Pruébalo en línea!
⍳
d ndices 1 ... Ntable
∘.|
resto-tabla (usando esos dos como ejes)⍳
ɩ ndices 1 ... N0+.=
la suma de los elementos igual a cero (es decir, cuántos divisores tiene cada uno)2+.=
la suma de los elementos igual a dos (es decir, cuántos primos hay)fuente
Python 3, 40 bytes
Un entero impar k es primo si solo si 2 ** (k-1) es congruente con 1 mod k. Por lo tanto, solo verificamos esta condición y agregamos 1 para el caso de k = 2.
fuente
MATL , 9 bytes
Esto evita la descomposición de factores primos. Su complejidad es O ( n ²).
Pruébalo en línea!
fuente
JavaScript (ES6),
50 + 246 + 243 bytesGuardado
35 bytes gracias a Neil:eval
Puede acceder aln
parámetro.El
eval(...)
cheques sin
es primo.Soluciones anteriores: el
recuento de bytes debería ser +2 porque olvidé nombrar la función
f=
(necesaria para la recursividad)46 + 2 bytes (Guardado 3 bytes gracias a ETHproductions):
50 + 2 bytes:
fuente
eval
puedo acceder aln
parámetro de su función (que olvidó nombrar, que le costó 2 bytes; es bueno saber que no soy el único que comete ese error) que le ahorra 5 bytes.eval
. Probado con Firefox, Chrome y Edge, funcionó para mí. La explicación es eval () analiza en el contexto de la declaración . Dos ejemplos:a=12;f=b=>eval('a + 5');f(8)
pantallas17
ya=12;f=a=>eval('a + 5');f(8)
pantallas13
.Java 7,102 bytes
Fuerza bruta
Sin golf
fuente
1
. Actualmente regresa en1
lugar de0
. Puedes solucionar este problema, ya sea cambiandoreturn c;
areturn n<2?0:c;
o cambiar,c=1,
a,c=n<2?0:1,
.q 35 bytes
fuente
En realidad, 10 bytes
Si mi primera respuesta en realidad no está permitida por usar una función generadora principal, aquí hay una respuesta de respaldo usando el teorema de Wilson. Sugerencias de golf bienvenidas. Pruébalo en línea!
Pruébalo en línea
fuente