Soy 2/3 gemelos con mi hermano, es decir, nací el mismo día del mismo mes pero doce años después. Cuando tenía 5 años, él tenía 17 años, ambos primos; el último par de edades con el que podemos contar razonablemente es [71, 83], estando ambos vivos y pudiendo celebrar este jubileo coincidente.
Tarea
Crea un código que
toma dos enteros como entrada: la diferencia entre el contador y el "gemelo" como un entero positivo k (bueno, sí, soy el más joven) y el límite superior como un entero positivo u (consideración de tiempo de ejecución)
y da salida como una matriz o lista de todos los números i inferiores o iguales a u para los cuales tanto i como i + k son números primos. La salida no necesita ser ordenada.
Casos de prueba
12, 1000 -> [5, 7, 11, 17, 19, 29, 31, 41, 47, 59, 61, 67, 71, 89, 97, 101, 127, 137, 139, 151, 167, 179, 181, 199, 211, 227, 229, 239, 251, 257, 269, 271, 281, 337, 347, 367, 389, 397, 409, 419, 421, 431, 449, 467, 479, 487, 491, 509, 557, 587, 601, 607, 619, 631, 641, 647, 661, 727, 739, 757, 761, 797, 809, 811, 827, 907, 929, 941, 971, 997]
2, 999 -> [3, 5, 11, 17, 29, 41, 59, 71, 101, 107, 137, 149, 179, 191, 197, 227, 239, 269, 281, 311, 347, 419, 431, 461, 521, 569, 599, 617, 641, 659, 809, 821, 827, 857, 881]
3, 1500 -> [2]
30, 1500 -> [7, 11, 13, 17, 23, 29, 31, 37, 41, 43, 53, 59, 67, 71, 73, 79, 83, 97, 101, 107, 109, 127, 137, 149, 151, 163, 167, 181, 193, 197, 199, 211, 227, 233, 239, 241, 251, 263, 277, 281, 283, 307, 317, 337, 349, 353, 359, 367, 379, 389, 401, 409, 419, 431, 433, 449, 457, 461, 479, 491, 541, 547, 557, 563, 569, 571, 577, 587, 601, 613, 617, 631, 643, 647, 653, 661, 709, 727, 739, 743, 757, 797, 809, 823, 827, 829, 853, 857, 877, 881, 907, 911, 937, 941, 947, 953, 967, 983, 991, 1009, 1019, 1021, 1031, 1033, 1039, 1061, 1063, 1087, 1093, 1123, 1151, 1163, 1171, 1187, 1193, 1201, 1229, 1249, 1259, 1277, 1289, 1291, 1297, 1399, 1409, 1423, 1429, 1451, 1453, 1459, 1481, 1493]
Editar
Como no pude especificar el límite superior, las soluciones inclusivas y exclusivas son bienvenidas.
Editar No. 2
El desafío termina el 1 de septiembre, una semana desde el comienzo.
Parece que tenemos un ganador, pero en caso de empate, la popularidad es el desempate; en este caso, el "segundo" será compensado mediante recompensa.
Respuestas:
Jalea,
87 bytesPruébalo en línea!
Explicación
fuente
Brachylog ,
2723 bytesPruébalo en línea!
Verifique todos los casos de prueba.
Predicado 0 (predicado principal)
Predicado 1 (predicado auxiliar)
fuente
05AB1E , 9 bytes
Código:
Utiliza la codificación CP-1252 . Pruébalo en línea! .
fuente
Pyke, 10 bytes
Pruébalo aquí!
También 10 bytes:
Pruébalo aquí!
fuente
Octava,
3433 bytesfuente
MATL , 8 bytes
Gracias a @alephalpha por su enfoque , que me ayudó a ahorrar 3 bytes
Pruébalo en línea!
fuente
Python 3,
1149290 bytesGracias a @Dennis por -2 bytes
Una función que toma datos a través de argumentos y devuelve un conjunto sin clasificar. Esto es exclusivo con respecto al límite superior.
Esto usa el método en la respuesta de @ xnor aquí para encontrar números primos.
Pruébalo en Ideone
Cómo funciona
Primer hallazgo
Primero inicializamos un valor de prueba
i
y un productoP
como1
, y una lista de primosl
como el conjunto que contiene0
. Luego, se ejecuta unwhile
bucle que prueba todos los valoresi
en el rango[1, u+k-1]
de primalidad. La idea es que al multiplicarP
pori^2
al final de cada iteración,P
toma el valor(i-1)!^2
durante la pruebai
, es decir, el producto de los enteros al[1, i+1]
cuadrado. La prueba de primalidad real se realiza calculandoP mod i
; si esto devuelve cero, entoncesi
no puede ser primo ya que esto implica quei
es divisible por al menos uno de los valores que componen el producto. Si esto vuelve1
, entoncesi
debe ser primo ya que no es divisible por ninguno de los valores del producto. Sii
es primo, se agrega al
, y si no,0
se agrega. La cuadratura del producto evita la identificación falsa de4
como primo, y es útil aquí ya que garantiza que solo0
o1
será devuelto, permitiendo que se elija el valor que se agregará simplemente multiplicando el resultado pori
.Identificación de primos 'gemelos'
Ahora creamos un conjunto adicional, que contiene todos los elementos de
l-k
, en cuanto a elementos. La intersección de este conjunto yl
luego se encuentra usando&
, lo que deja un conjunto que contiene solo los elementos comunes a ambos conjuntos. Un númeroi
es única en ambos conjuntos si ambosi
yi+k
son primos, lo que significa que esto deja la salida deseada. Sin embargo, sik
es primo,0
estará presente en ambos conjuntos, lo que significa que debe eliminarse antes de regresar.fuente
k,u=input();i=P=1;l={0};exec'l|={P%i*i};P*=i*i;i+=1;'*(u+k);print{i-k for i in l}&l
funciona para 83 bytes en Python 2. Incluso en 3, construir un conjunto de esta manera debería ahorrar algunos bytes.0
del conjunto final, ya que sik
es primo, esto se devuelve por error .R, 98 bytes
Sin golf:
fuente
CJam, 17 bytes
Ya sea como un programa completo:
Pruébalo en línea!
O como un bloque sin nombre:
Pruébalo en línea!
fuente
Java 7,
185175 bytesUngolfed y código de prueba:
Pruébalo aquí
Salida:
fuente
PARI / GP, 39 bytes
fuente
Mathematica, 43 bytes
Genere todos los primos menores o iguales al límite superior. Agregue la diferencia de edades al resultado. Seleccione números primos entre ellos. Resta la diferencia de edades al resultado.
fuente
Swift, 142 bytes
fuente
Perl 6 ,
3937 bytesExplicación:
fuente
SILOS , 205 bytes
Pruébalo en línea!
Prueba de Primalty por el teorema de Wilson .
fuente
En realidad , 12 bytes
La entrada es
u
entoncesk
. Sugerencias de golf bienvenidas. Pruébalo en línea!No golfista:
fuente
R, 104 bytes
A diferencia de la otra solución R publicada, esta toma la entrada de stdin.
Sin golf:
fuente
Javascript (ES6),
90838075 bytesEjemplo:
fuente
Pyth, 13 bytes
Un programa que toma la entrada de una lista del formulario
[k, u]
e imprime una lista.Pruébalo en línea
Cómo funciona
fuente