Una de mis definiciones favoritas de los números primos es la siguiente:
2 es el primo más pequeño.
Los números mayores que 2 son primos si no son divisibles por un primo más pequeño.
Sin embargo, esta definición parece arbitraria, ¿por qué 2? ¿Por qué no algún otro número? Bueno, intentemos con otros números que definirán n-primo de modo que
n es el n-primo más pequeño.
Los números mayores que n son n-primos si no son divisibles por un n-primo más pequeño.
Tarea
La tarea aquí es escribir un programa que tome dos entradas, un entero positivo n y un entero positivo a . Luego decidirá si a es n -prime. Su programa debería generar dos valores distintos, uno para "sí, es n-prime" y otro para "no, no es n-prime".
Esta es una pregunta de código de golf, por lo que las respuestas se puntuarán en bytes, siendo menos bytes mejores.
Pruebas
Aquí hay una lista de los primeros 31 primos para n = 2 a n = 12 (1 es el único número primo 1)
n=2: [2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113,127]
n=3: [3,4,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113,127]
n=4: [4,5,6,7,9,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113]
n=5: [5,6,7,8,9,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113]
n=6: [6,7,8,9,10,11,13,15,17,19,23,25,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107]
n=7: [7,8,9,10,11,12,13,15,17,19,23,25,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107]
n=8: [8,9,10,11,12,13,14,15,17,19,21,23,25,29,31,35,37,41,43,47,49,53,59,61,67,71,73,79,83,89,97]
n=9: [9,10,11,12,13,14,15,16,17,19,21,23,25,29,31,35,37,41,43,47,49,53,59,61,67,71,73,79,83,89,97]
n=10: [10,11,12,13,14,15,16,17,18,19,21,23,25,27,29,31,35,37,41,43,47,49,53,59,61,67,71,73,79,83,89]
n=11: [11,12,13,14,15,16,17,18,19,20,21,23,25,27,29,31,35,37,41,43,47,49,53,59,61,67,71,73,79,83,89]
n=12: [12,13,14,15,16,17,18,19,20,21,22,23,25,27,29,31,33,35,37,41,43,47,49,53,55,59,61,67,71,73,77]
fuente
n=6, a=15
Es el primer caso de prueba interesante.Respuestas:
Haskell , 45 bytes
Pruébalo en línea!
Defino una buena función recursiva
(!)
:n!a
comprueba si algún factor dea
, en el rango[n,a-1]
, es unn-prime
. Entonces niega el resultado. También se asegura de quen>a
fuente
Python 2 ,
3937 bytesGracias a Halvard Hummel por -2 bytes.
Pruébalo en línea!
fuente
Python 3 , 45 bytes
Pruébalo en línea!
Cómo funciona
Esto toma dos enteros como entrada, i y k . Primero verifica si k ≥ i . Luego genera el rango [i, k) y para cada número entero N en este rango, verifica si N es coprimo para k . Si se cumplen ambas condiciones, entonces k es un i -prime.
fuente
&
lugar deand
y en>=i
lugar de>i-1
?>=i
todavía tiene 4 bytes (debido al espacio).&
no necesitas el espacio.Casco ,
65 bytesPruébalo en línea! o ver resultados hasta 80 .
Gracias a Leo por -1 byte.
Explicación
fuente
R ,
4437 bytesPruébalo en línea!
-7 bytes gracias a Giuseppe
Devuelve
TRUE
sia
es igualn
oa==n|
)a
es mayor quen
y (a>n&
) para cada número k desden
hastaa-1
,a
no es divisible por k (all(a%%n:(a-1))
)Devoluciones de lo
FALSE
contrariofuente
J, 30 bytes
Pruébalo en línea!
Toma el valor inicial como el argumento correcto y el valor para verificar en el argumento izquierdo.
Me equivoqué originalmente y no tomé en cuenta los argumentos de la izquierda menos que el primo inicial. Estoy algo descontento con la duración de mi solución ahora.
Explicación
Deje que
x
sea el argumento izquierdo (el valor a verificar) yy
sea el argumento correcto (el primo inicial).Notas
El elemento en la posición
x-y
es el resultado de la prueba de primalidad parax
(ya que agregamosy
al rango original).Multiplicar por
x >: y
garantiza que obtengamos un valor de falsey (0
) porx
menos dey
.fuente
JavaScript (ES6),
333230 bytesToma entrada en la sintaxis de curry
(n)(a)
. Devuelve un booleano.Manifestación
Mostrar fragmento de código
fuente
Haskell , 30 bytes
2 bytes guardados gracias a la idea de H.PWiz que fue tomada de la respuesta de flawr
Pruébalo en línea!
Ok, ya que ha pasado un tiempo, y la única respuesta de Haskell hasta ahora es de 45 btyes, decidí publicar mi propia respuesta.
Explicación
Esta función comprueba que el único número entre n y a que a es divisible es a sí mismo.
Ahora la definición solo menciona n -primes más pequeños que a , entonces, ¿por qué estamos verificando todos estos números adicionales? ¿No tendremos problemas cuando a es divisible por algún compuesto n mayor que n ?
No lo haremos porque si hay un compuesto n mayor que n , debe ser divisible por un n -prime más pequeño por definición. Por lo tanto, si divide a, también debe hacerlo el n -prime más pequeño.
Si a es menor que n
[n..a]
,[]
entonces no puede ser igual, lo que[1]
hace que la verificación falle.fuente
Jalea , 8 bytes
Pruébalo en línea!
fuente
Pip ,
231914 bytesEl método más corto es un puerto de la respuesta de Python del Sr. Xcoder . Toma el primo más pequeño y el número para probar como argumentos de línea de comandos. Pruébalo en línea!
fuente
C, 55 bytes
Pruébalo en línea!
53 bytes si se permiten múltiples valores de retorno verdaderos:
Pruébalo en línea!
fuente
dc ,
403437 bytesHubiera incluido un enlace TIO, pero TIO parece estar llevando una distribución defectuosa de
dc
ver cómo funciona esto según lo previsto en mi sistema, pero elQ
comando funciona erróneamente en TIO. En cambio, aquí hay un enlace a unbash
campo de pruebas con una versión que funciona correctamente dedc
:Demo It!
fuente
APL (Dyalog) , 24 bytes
Pruébalo en línea!
¿Cómo?
⍳⍵
-1
aa
o←⍺↓
-n
aa
, guardar eno
o|⍨⊂o
- módulo de cada elemento eno
con cada elemento eno
0=
- verifica donde es igual0
(se divide)+/¨
- suma el número de divisiones1=
- si solo tenemos uno, entonces el número solo se divide por sí mismoo/⍨
- entonces mantenemos estas ocurrencias⍵∊
- estáa
en esa matriz residual?fuente
JavaScript (Node.js) , 27 bytes
Pruébalo en línea!
El puerto de mi respuesta de Python, toma la entrada en la sintaxis curry:
m(number)(first prime)
fuente
JavaScript ES5, 34 bytes
fuente
Añadir ++ , 20 bytes
Pruébalo en línea!
fuente