La tarea
Escriba un programa o función que, cuando se pasa una entrada numérica x
, imprime o devuelve los primos debajo de la raíz cuadrada de x
1 que no son factores de x
.
Ejemplos
Deje f(x)
ser la función llamada:
>>> f(4)
[]
>>> f(5)
[2]
>>> f(20)
[3]
>>> f(60)
[7]
>>> f(100)
[3, 7]
>>> f(10000)
[3, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]
Reglas de bonificación
- Puede usar cualquier componente que le proporcione su idioma.
- Su programa debe admitir una
x
entrada tan alta como el límite superior definido por su idioma.
1 El uso de la raíz cuadrada como solo primos debajo de la raíz cuadrada puede estar involucrado dentro de los factores de x
. Sin hacer esta restricción, los números más grandes tendrían una gran cantidad de números impresos en exceso.
x
" no es cierto: un número puede tener un factor primo que sea mayor que su raíz cuadrada. De hecho, sus dos primeros ejemplos (5 y 20) tienen esta propiedad, al igual que todos los números primos, dos veces todos los números primos impares ...Respuestas:
Jelly, 6 bytes en la página de códigos de Jelly
Pruébalo en línea!
Explicación:
fuente
MATL ,
109 bytesPruébalo en línea!
Explicación
fuente
Python 3 ,
6762 bytesPruébalo en línea!
fuente
MATLAB,
5754 bytesBastante sencillo, obtiene una matriz de primos hasta sqrt (p) y luego elimina los que también son factores de p. Imprime la salida de la última línea de forma predeterminada porque el punto y coma se deja desactivado.
fuente
Pyth, 10 bytes
Un programa que toma la entrada de un número e imprime una lista.
Banco de pruebas
Cómo funciona
fuente
05AB1E , 8 bytes
Pruébalo en línea!
Explicación
fuente
PHP, 76 bytes
utiliza mi solución is_prime golfed por $ n> 1
toma datos del argumento de la línea de comando. Corre con
-r
.fuente
Mathematica, 46 bytes
Función anónima. Toma un número como entrada y devuelve una lista de números como salida. El carácter Unicode es U + 2223 DIVIDES para
\[Divides]
.fuente
Ruby, 55 bytes
Una respuesta bastante perezosa usando el enumerador principal incorporado.
fuente
Maravilla , 14 bytes
Uso:
Toma elementos de una lista infinita de números primos, mientras que el elemento es menor que la raíz cuadrada del argumento.
fuente
Pyke, 10 bytes
Pruébalo aquí!
fuente
PowerShell v2 +, 71 bytes
Solución iterativa. Toma datos
$n
y crea un rango desde1
aSqrt($n)
(tenga en cuenta que el operador de rango implícitamente lanzará el extremo superior a un[int]
que hará el redondeo de Banker por defecto). Luego usa|?{...}
(elWhere-Object
operador, que actúa como un filtro) para extraer aquellos números donde$n%$_
no es cero (es decir, cualquier resto del módulo significa que no es un factor, y cualquier otro que no sea cero es verdadero),-and
la prueba de regex prima habitual es$true
. Los que quedan en la tubería, y la salida es implícita.Ejemplos
(con un formato adicional para mejorar la salida)
Nota: esto fallará en versiones anteriores si la entrada es mayor que alrededor
2500000000
, porque el..
operador de rango solo puede admitir hasta 50,000 artículos. Pero, dado que es mayor que el valor[int]
máximo del tipo de datos predeterminado2147483647
, supongo que está bien. Sin embargo, en mi máquina, PSv4 Win8.1, puedo ir más alto, pero no puedo encontrar documentación que explique la diferencia.fuente
JavaScript (ES6),
7976 bytesBasado en mi función de prueba de primitiva recursiva . Siento que debería haber algunas formas de simplificar esto, pero no puedo entender cómo ...
Fragmento de prueba
fuente
Octava, 44 bytes
Esta respuesta está inspirada en la respuesta MATLAB de MattWH , pero la he jugado usando algunas características específicas de Octave.
Esta es una función anónima que toma la entrada
x
. Octave tiene una asignación e indexación de variables en línea que permitey
crearse primero en la función (no es posible en MATLAB), luego se usa como parte de la máscara lógica creada porismember
(nuevamente, no es posible hacerlo de esta manera en MATLAB).fuente
Perl 6 , 37 bytes
Expandido:
fuente
TSQL, 130 bytes
Esto solo se ejecutará una vez, luego debe soltar la tabla temporal para ejecutar nuevamente en el mismo editor
Hice una versión para probarla, es un poco más larga porque los permisos en línea para crear tablas no están disponibles. Sin embargo, por la misma razón, no necesita la tabla desplegable.
Pruébalo en línea
fuente
R,
5863 bytesRecorre todos los valores de 2 a
sqrt(x)
y comprueba si son primos con elnumbers
paquete.x%%i
calculax mod i
cuál es0 -> False
sii
es un divisor dex
y>0 -> True
sii
no lo es.+5 bytes porque la
numbers::Primes(n)
función no permite decimales, mientras que2:sqrt(x)
sí funciona, agregó la verificación principal a laif
declaración.fuente
Haskell,
5554 bytesPrincipalmente comprensiones sencillas de listas anidadas. GCD realiza dos roles, probando si los números debajo de y son factores de y y también si y es un factor de x.
Espaciado un poco:
fuente
gcd(z*x)y>1
.Retina ,
6966 bytesImprime los números primos en líneas separadas, de mayor a menor.
Pruébalo en línea! (Toma alrededor de 10 segundos debido a los dos últimos casos de prueba. El encabezado y el pie de página habilitan un conjunto de prueba separado por salto de línea y convierten la salida en separación por coma para facilitar la lectura).
Explicación
Convierta la entrada a unario.
Esto antepone la raíz cuadrada de la entrada, separada por
:
. La raíz cuadrada se calcula en función del hecho de que el cuadrado den
es también la suma de los primerosn
enteros impares. Podemos hacer coincidir enteros impares consecutivos con la referencia directa(11\1|^1)
. En el proceso, el grupo se usará exactamente lasn
veces, donden
es el número más grande cuyo cuadrado encaja en la entrada.Insertamos una representación unaria de este número con
$#1$*1
, seguido de dos puntos y la coincidencia misma.Esto coincide con todos los números primos faltantes que se ajustan a la raíz cuadrada. La detección de cebado se basa en la expresión regular de verificación de cebado estándar , y luego simplemente nos aseguramos de que el cebado que acabamos de capturar no divida la entrada con la segunda búsqueda anticipada. Al usar la
&
opción, obtenemos coincidencias superpuestas para garantizar que obtengamos todos los números primos.Esto convierte cada línea (es decir, cada primo faltante) de nuevo a decimal haciendo coincidir el número de
1
s. El único problema es que esto inserta un cero si no se encontraron primos faltantes.Entonces, esta etapa elimina ese cero si se agregó.
fuente