Definición
Un semiprime sin cuadrados es un número natural que es el producto de dos números primos distintos.
La tarea
Dado un número natural n
, cuente todas las semiprimes sin cuadrados menores o iguales que n
.
Detalles
Escriba una función o procedimiento que acepte un único parámetro entero y cuente todos los semiprimes sin cuadrados menores o iguales a su parámetro. El recuento debe ser un valor de retorno de una llamada de función o imprimirse en STDOUT.
Puntuación
La respuesta con el menor número de caracteres gana.
En caso de empate, se utilizarán los siguientes criterios en orden:
Persona más altaMejor complejidad temporal
- La peor complejidad espacial
Ejemplos
f(1) = 0
f(62) = 18
f(420) = 124
f(10000) = 2600
console.log
?Respuestas:
J,
50403837 caracteresUso:
Gracias a FUZxxl .
Prueba de rendimiento
No soy un teórico como se ha visto aquí en el pasado, pero creo que la complejidad del tiempo es algo así como O (n p 2 ) donde n p es el número de primos hasta e incluyendo el número de entrada n. Esto se basa en la suposición de que la complejidad de mi método (generar una tabla de multiplicación muy grande) supera con creces la complejidad de la función generadora principal incorporada en J.
Explicación
f=:3 :'...'
declara un verbo (función) monádico. La entrada al verbo está representada pory
dentro de la definición del verbo.p:i._1&p:y
Elp:
verbo es los números primos de usos múltiples verbo, y se utiliza de dos maneras diferentes aquí:_1&p:y
devuelve el número de primos menos dey
entoncesp:i.
genera cada uno de ellos. Usando 10 como entrada:(~:/**/)~
genera la tabla de la que hablé anteriormente.*/
genera una tabla de multiplicación,~:/
genera una tabla no igual (para eliminar los cuadrados) y ambos se multiplican juntos. Usando nuestra salida anterior como entrada:}.~.,
ahora convertimos los números en una lista,,
obtenemos los valores únicos~.
y eliminamos el 0 al comienzo}.
y<:
Una comparación con la entrada original para verificar qué valores son válidos:+/
y luego sume eso para obtener la respuesta.fuente
+/-.x<}.~.,(~:/~*[*/])p:i._1&p:[x=.n
donde n es la entrada.f=:3 :'+/-.y<}.~.,(~:/~*[*/])p:i._1&p:y'
por 40 caracteres?3 :'...'
Mathematica
656455514739Código
Lo siguiente cuenta el número de semiprimes sin cuadrados menores o iguales a
n
:Cualquier factor semiprime sin cuadrados en una estructura de la forma:
{{p,1}{q,1}}
por ejemplo,La rutina simplemente cuenta los números en el rango deseado que tienen esta estructura de factores.
Uso
Tiempo: todos los ejemplos dados
Tiempo: n = 10 ^ 6
Se necesitan menos de cuatro segundos para contar el número de semi-primos sin cuadrados menores o iguales a un millón.
fuente
=
y después del,
realmente son sintácticamente necesarios?Python, 115
fuente
f=lambda x:sum([(i*j<=x)&p(j)&p(i)for i in r(2,x)for j in r(2,i)])
Guarda 5 caracteres.itertools
en mi cabeza.Jalea , 7 bytes
Pruébalo en línea!
Cómo funciona
fuente
Pitón (139)
Proporcione algunos resultados de muestra para que los competidores puedan probar sus programas.
fuente
Rubí 82
Demostración: http://ideone.com/cnm1Z
fuente
Python 139
fuente
Golfscript 64
Demostración en línea aquí
Nota: En la demostración anterior, excluí los casos de prueba
420
y10000
. Debido a la prueba de primalidad extremadamente ineficiente, no es posible hacer que el programa se ejecute para estas entradas en menos de 5 segundos.fuente
Shell, 40
Uso:
fuente
Jalea ,
1413 bytesPruébalo en línea!
La crítica constructiva bienvenida!
fuente
⁼
yS
se puede convertir en un uso deċ
(Count). Puede obtener hasta 10 bytes usándolo. ¡Te dejaré resolverlo!Python 2/3 ,
9594 bytesPruébalo en línea!
Publicado en un desafío de 6 años porque establece un nuevo récord de Python, un IMO es un enfoque bastante interesante.
Explicación
Python 2/3 (PyPy) ,
888281 bytesPruébalo en línea!
Basado en un golf de 92 bytes de Value Ink. Se necesita PyPy para interpretar correctamente
0or
, porque Python estándar ve esto como un intento de un número octal.fuente
Stax , 8 bytes
Ejecutar y depurarlo
Desempaquetado, sin golf y comentado, se ve así.
Ejecute este
fuente
Perl 6 ,
5845 bytesGracias a Jo King por -13 bytes.
Aprovecha el hecho de que los enteros con cuatro factores son semiprimes sin cuadrados o cubos perfectos.
Pruébalo en línea!
fuente
Brachylog , 7 bytes
Pruébalo en línea!
fuente
Retina , 58 bytes
Pruébalo en línea!
Toma como entrada unaria con
_
marca de conteoExplicación
Un número es un semi-primo sin cuadrado si su factor más grande y más pequeño, excluyéndose a sí mismo y 1, son ambos primos.
Toma la entrada y genera cada número unario menor o igual a él, cada uno en su propia línea
Entonces, para cada número ...
Encuentra su factor más pequeño y más grande, excluyéndose un 1 ...
y cuenta el número de ellos que es primo. Como el factor más pequeño debe ser primo, esto devuelve 1 o 2
Cuenta el número total de 2
fuente
Python 2 ,
105104 bytesPruébalo en línea!
1 byte gracias al calamar 🦑
fuente
(p*p)
puede serp**2
Ruby
-rprime
, 64 bytesSé que hay otra solución de Ruby aquí, pero no quería incluirla en los comentarios ya que fue respondida en 2012 ... y resulta que usar un indicador de programa lo cuenta como un idioma diferente , así que supongo que esto técnicamente no es "Ruby" de todos modos.
Pruébalo en línea!
Explicación
fuente
APL (NARS), caracteres 26, bytes 52
prueba:
esta es una alternativa más larga (59 caracteres que preferiría)
prueba:
fuente