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=15Es el primer caso de prueba interesante.Respuestas:
Haskell , 45 bytes
Pruébalo en línea!
Defino una buena función recursiva
(!):n!acomprueba si algún factor dea, en el rango[n,a-1], es unn-prime. Entonces niega el resultado. También se asegura de quen>afuente
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 deandy en>=ilugar de>i-1?>=itodaví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
TRUEsiaes igualnoa==n|)aes mayor queny (a>n&) para cada número k desdenhastaa-1,ano es divisible por k (all(a%%n:(a-1)))Devoluciones de lo
FALSEcontrariofuente
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
xsea el argumento izquierdo (el valor a verificar) yysea el argumento correcto (el primo inicial).Notas
El elemento en la posición
x-yes el resultado de la prueba de primalidad parax(ya que agregamosyal rango original).Multiplicar por
x >: ygarantiza que obtengamos un valor de falsey (0) porxmenos 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
dcver cómo funciona esto según lo previsto en mi sistema, pero elQcomando funciona erróneamente en TIO. En cambio, aquí hay un enlace a unbashcampo de pruebas con una versión que funciona correctamente dedc:Demo It!
fuente
APL (Dyalog) , 24 bytes
Pruébalo en línea!
¿Cómo?
⍳⍵-1aao←⍺↓-naa, guardar enoo|⍨⊂o- módulo de cada elemento enocon cada elemento eno0=- 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áaen 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