Dado un número natural , devuelve el -ésimo primer cubano .
Primos cubanos
Un primo cubano es un número primo de la forma
donde y o
Detalles
- Puede usar indexación basada en 0 o 1, lo que más le convenga.
- Puede devolver la -ésima prima dado el índice o los primeros primos en orden creciente, o alternativamente puede devolver una lista / generador infinito que produce los primos en orden creciente.
Casos de prueba
Los primeros términos son los siguientes:
(#1-13) 7, 13, 19, 37, 61, 109, 127, 193, 271, 331, 397, 433, 547,
(#14-24) 631, 769, 919, 1201, 1453, 1657, 1801, 1951, 2029, 2269, 2437,
(#25-34) 2791, 3169, 3469, 3571, 3889, 4219, 4447, 4801, 5167, 5419,
(#35-43) 6211, 7057, 7351, 8269, 9241, 10093, 10267, 11719, 12097,
(#44-52) 12289, 13267, 13669, 13873, 16651, 18253, 19441, 19927, 20173
Se pueden encontrar más términos en OEIS: se dividen en dos secuencias, dependiendo de si o : A002407 y A002648
Respuestas:
JavaScript (V8) , 54 bytes
Un programa completo que imprime primos cubanos para siempre.
Pruébalo en línea!
NB: a menos que tenga papel infinito en su impresora, no intente ejecutar esto en la consola de su navegador , donde
print()
puede tener un significado diferente.JavaScript (ES6),
63 61 6059 bytesDevuelve eln -ésimo primer cubano, 1-indexados.
Pruébalo en línea!
¿Cómo?
Esto se basa en el hecho de que los primos cubanos son primos de la forma:
La fórmula anterior se puede escribir como:
o para cualquiery>0 :
que esX3- y3x - y parax=y+1 yx=y+2 respectivamente.
fuente
05AB1E ,
16129 bytesGenera una lista infinita.
Guardado 4 bytes con la fórmula del puerto de Arnaulds de Kevin Cruijssen .
Ahorró otros 3 bytes gracias a Grimy
Pruébalo en línea!
Explicación
fuente
N^2+3
en la pila " debería ser3*N^2
. Además, ¿por qué en)
lugar de¯
? ¿Porque es más fácil escribir? Y por alguna razón tengo la sensación de queNnN‚3*¬sO‚
puede ser 1 byte más corto, pero no lo veo. Una ligera alternativa de igual byte esNn3*DN3*+‚
. Pero probablemente solo estoy viendo cosas que no están allí ...;) Buena respuesta, entonces +1 de mi parte.R ,
7573 bytesPruébalo en línea!
-2 bytes al notar que puedo eliminar corchetes si lo uso en
*
lugar de&
(precedencia diferente).Salidas del
n
primer primo cubano (1 indexado).Utiliza el hecho (dado en OEIS) de que los primos cubanos tienen la formap=1+3n2 o 4p=1+3n2 para algunos n , es decir, n=a⋅p−13−−−−√ es un número entero paraa=1 oa=4 .
El truco es que ningún primo puede tener la forma2p=1+3n2 o 3p=1+3n2 (*), por lo que podemos ahorrar 2 bytes al verificar la fórmula para a∈{1,2,3,4} ( a∈{1,4} (
1:4
) en lugar dec(1,4)
).Versión del código levemente no golfed:
fuente
Wolfram Language (Mathematica) ,
666556 bytesPruébalo en línea!
J42161217 -1 utilizando en
⌊ ⌋
lugar deFloor[ ]
attinat
⌊3#/4#⌋
lugar de⌊3#^2/4⌋
For[n=i=0,i<#,PrimeQ@f@++n&&i++]
lugar den=2;i=#;While[i>0,i-=Boole@PrimeQ@f@++n]
fuente
Java 8,
94888684 bytes-6 bytes usando el primer corrector Java de @SaraJ , ¡así que asegúrate de votarla!
-2 bytes gracias a @ OlivierGrégoire . Como el primer número que verificamos es
7
, podemos eliminar el seguimiento%n
del primer verificador de Sara, que es para terminar el ciclon=1
.-2 bytes gracias a @ OlivierGrégoire al portar la respuesta de @Arnauld .
Salidas delimitadas por espacios indefinidamente.
Pruébalo en línea.
Explicación (de la versión anterior de 86 bytes): TODO: explicación de la actualización
fuente
v->{for(int n=7,i=3,p,x,d,r=0;;i+=++r%2*3,n+=i,System.out.print(x>1?x+" ":""))for(x=n,d=1;++d<n;x=x%d<1?0:n);}
tal vez alguien puede usar esto para jugar golf? No pude,p
y cambiandoi+=++r%2*3,n+=i
an+=i+=++r%2*3
, pero aún así terminaré en 106 bytes. Uso de Java 11 deString#repeat
la prime-expresión regular es de 105 bytes:v->{for(int n=7,i=3,r=0;;n+=i+=++r%2*3)if(!"x".repeat(n).matches(".?|(..+?)\\1+"))System.out.println(n);}
.%n
no es obligatorio, ¿verdad?Wolfram Language (Mathematica) , 83 bytes
Pruébalo en línea!
fuente
Jalea , 12 bytes
Pruébalo en línea!
Basado en el método de @ Arnauld . Toma n en stdin y devuelve que muchos primos cubanos.
fuente
Wolfram Language (Mathematica) , 83 bytes
Esta solución generará la enésima prima cubana con los beneficios adicionales de ser rápido y recordar todos los resultados anteriores en el símbolo f.
Pruébalo en línea!
fuente
Espacio en blanco , 180 bytes
Se agregaron letras
S
(espacio),T
(tabulación) yN
(nueva línea) solo como resaltado.[..._some_action]
agregado solo como explicación.Salidas delimitadas por nueva línea indefinidamente.
Pruébelo en línea (solo con espacios en bruto, pestañas y nuevas líneas).
Explicación en pseudocódigo:
fuente
Python 3 ,
110108102 bytesMétodo similar a mi respuesta de Mathematica (es decir
isPrime(1+⌊¾n²⌋) else n++
) usando este corrector principal de golf y devolviendo un generador anónimo infinitoPruébalo en línea!
count
en 2 +1 para que eland x>1
verificador principal que tomé prestado sea innecesario -7fuente
g=
. En primer lugar, solo lo había incluido porque permitía una visualización rápida en TIO conprint(next(g) for i in range(52))
.Japt ,
1413 bytesAdaptado de la fórmula de Arnauld . 1 indexado.
Intentalo
1 byte guardado gracias a EmbodimentOfIgnorance.
fuente
(
.Raqueta , 124 bytes
Pruébalo en línea!
Devuelve el enésimo primo cubano, indexado a 0.
Utiliza la fórmula de la respuesta JavaScript de @ Arnauld
fuente
Python 3 , 83 bytes
imprime los primos cubanos para siempre.
Pruébalo en línea!
fuente
Perl 6 ,
3331 bytes-2 bytes gracias a Grimy
Pruébalo en línea!
Bloque de código anónimo que devuelve una lista infinita perezosa de primos cubanos. Utiliza la fórmula de Arnauld para generar posibles primos cubanos y luego
&is-prime
filtrarlos.Explicación:
fuente
1+0+|
puede ser justo1+|
Pari / GP , 51 bytes
Usando la fórmula de Arnauld .
Pruébalo en línea!
fuente
APL (NARS), 98 caracteres, 196 bytes
sangrado:
prueba:
se basa en: si y en N, un posible Prime cubano es
el próximo posible primer cubano será
fuente