Recientemente leí la novela "La soledad de los números primos", donde los personajes principales se comparan de alguna manera con los números primos gemelos (" siempre juntos, pero nunca tocándose ").
Un primo gemelo es un número primo que es 2 menos o 2 más que otro número primo, por ejemplo, el par primo gemelo (41, 43). En otras palabras, un primo gemelo es un primo que tiene un espacio de primo de dos. Algunas veces el término primo gemelo se usa para un par de primos gemelos; un nombre alternativo para esto es primer gemelo o primer par. Wikipedia
Aunque no me gustó mucho la novela deprimente, y desde que he caído en PPCG últimamente, eso me planteó una pregunta ...
Tarea:
Dado un número entero positivo N> 4, encuentre los números primos solitarios (también conocidos como números primos aislados ) entre las parejas más cercanas de primos gemelos .
Tenga en cuenta que en este caso con el término números primos solitarios , me refiero a todos los números primos que no son primos gemelos y entre parejas de primos gemelos . Es por eso que N> 4 porque las dos primeras parejas de números primos son (3, 5) y (5, 7).
Ejemplo:
- N = 90.
- Encuentre las dos primeras parejas de primos gemelos <N y> N. Son: (71, 73) y (101, 103).
- Encuentra los primos solitarios en el rango> 73 y <101.
- Ellos son: 79, 83, 89, 97.
Casos especiales:
- Si N está entre dos números primos gemelos, encuentre las parejas más cercanas de primos gemelos> N + 1 y <N-1. Ejemplo: N = 72, encuentre las parejas más cercanas de primos gemelos> 73 y <71 y luego excluya de la lista 71 y 73 porque no son primos solitarios . Entonces, para N = 72, el resultado esperado es: 67,
71,73, 79, 83, 89, 97 - Si N pertenece a un par de primos gemelos, por ejemplo N = 73, las parejas más cercanas de primos gemelos son (71, 73) y (101, 103). Si N = 71, las parejas más cercanas de primos gemelos son (59, 61) y (71, 73).
Casos de prueba:
N = 70 > Lonely primes are: 67
N = 71 > Lonely primes are: 67
N = 72 > Lonely primes are: 67, 79, 83, 89, 97 (not the twins 71 and 73)
N = 73 > Lonely primes are: 79, 83, 89, 97
N = 90 > Lonely primes are: 79, 83, 89, 97
N = 201 > Lonely primes are: 211, 223
N = 499 > Lonely primes are: 467, 479, 487, 491, 499, 503, 509
Reglas:
- Escriba un programa o función completa que tome el número N de la entrada estándar.
- Imprima la lista de primos solitarios en un formato legible como csv, list, array, etc.
- El código más corto gana.
- Incluya (cuando sea posible) un violín en línea comprobable.
Respuestas:
En realidad, 47 bytes
Esta solución trata el caso donde
n
está entre dos primos gemelos, al verificar si el límite inferior es el mayor de un par de primos gemelos (eliminando que el primo gemelo a la izquierda de nosotros sea nuestro límite inferior) y si el límite superior es el más pequeño de un par de primos gemelos (eliminando el primo gemelo a la derecha de nosotros de ser nuestro límite superior). Para evitar que los primos gemelos se incluyan en nuestro rango una vez que tenemos los límites inferior y superior, necesitamos eliminar los primosp
dondep-2
ORp+2
son primos, de ahí el OR lógico y se niegan en el código.Esto es un poco largo y probablemente se pueda jugar más golf. Sugerencias de golf bienvenidas. Pruébalo en línea!
Ungolfing
fuente
23
cuando24
se da entrada . Los límites primos gemelos deben ser17 / 19
y29 / 31
, y23
es un primo aislado en el rango19 .. 29
.p
dice que25
es primo aún no se ha solucionado, o Dennis no se ha retirado en realidad desde la corrección del error. Déjame ir a comprobar.PowerShell v2 +,
237149147231216181174169166 bytesToma entrada
$n
. Define una nueva funciónf
como la función primo regex (aquí devuelve un booleano si la entrada es primo o no).La siguiente parte se establece
$i
para ser igual a$n
, luego gira hacia arriba hasta que encontremos la mitad inferior de nuestro límite superior de dos pares primos gemelos. Por ejemplo, para entrada90
, esto se detiene en$i=101
.Luego, giramos desde el límite superior hacia abajo. Lo sé, parece un bucle infinito, pero finalmente terminará.
Si el número actual es un número primo (
f(--$i)
), pero su+/- 2
no es un número primo, añadimos$i
a la tubería. Sin embargo, si+/- 2
es un primo, verificamos si somos más bajos que$n-1
(es decir, para tener en cuenta la situación cuando está dentro de un par primo gemelo), en ese momento nosotrosexit
. Al finalizar el programa, la tubería se imprime en la pantalla de forma implícitaWrite-Output
.Nota: debido a la estructura de bucle, imprime los números primos en orden descendente. OP ha aclarado que está bien.
Ejemplos
La salida aquí está separada por espacios, ya que ese es el método de stringificación predeterminado para una matriz.
fuente
Haskell, 105 bytes
Pruébalo en línea
fuente
JavaScript,
186183168158 Bytesfuente
PHP, 207 bytes
4754 bytes para lais_prime
función que PHP no tiene. Vencería a Mathematica sin eso. :-REcorrer con
-r
. imprime una coma final.Descompostura
Nota :
La
is_prime
función en realidad devuelvetrue
para$n<2
; pero al menos no produce una advertencia. Insertar$n=
antes$n>1
para arreglar.fuente
Mathematica,
169157 bytesfuente
Raqueta 228 bytes
La desventaja de esta versión es que encuentra todos los números primos hasta N y no solo aquellos alrededor de N.
Versión sin golf:
Pruebas:
Salida:
fuente
Raqueta 245 bytes
Versión sin golf:
Salida:
fuente
Python 2.7: 160 bytes
sugerencias son bienvenidas :)
fuente