La pregunta
Una prima de Sophie Germain es una prima p tal que 2p + 1 también es prima. Por ejemplo, 11 es un primo de Sophie Germain porque 23 también es primo. Escriba el programa más corto para calcular los números primos de Sophie Germain en orden ascendente
Reglas
- Los primos de Sophie Germain deben ser generados por su programa, no desde una fuente externa.
- Su programa debe calcular todos los primos de Sophie Germain bajo 2³²-1
- Debe imprimir cada primer Sophie Germain distinto que encuentre su programa.
- La persona con la puntuación más baja gana
Puntuación
- 2 puntos por byte de su código
- -10 si puede mostrar una prima generada por su programa mayor que 2³²-1
code-challenge
primes
Mezcla Miau
fuente
fuente
Respuestas:
CJam
Para 17 caracteres obtenemos una enumeración completa de hasta 2 ^ 32:
Para 4 caracteres más, obtenemos un rango lo suficientemente grande como para incluir un SG prime mayor que 2 ^ 32:
desde 4294967681 = 2 ^ 32 + 385 <2 ^ 32 + 400.
Por supuesto, también podríamos extender el rango de forma gratuita como
fuente
I,
se trataI
como un entero de 32 bits con signo, por lo que el valor máximo paraI
es2 ** 31 - 1
.Pyth, 19 bytes * 2-10 = 28
Tenga en cuenta que el compilador / ejecutor en línea no muestra resultados porque es un bucle infinito.
Explicado:
fuente
PZ
no devuelve un valor verdadero o falso. Devuelve la factorización prima deZ
. La prueba de prima es!tPZ
, que comprueba si la factorización prima solo contiene un factor.!tP
errores0
y1
ser primo, ya que su factorización prima solo contiene 1 factor. La solución fácil es reemplazar todoZ
porK
y asignarK2
al principio.K1
lugar deK2
e intercambie el if y el incremento. De esta manera puedes eliminar el)
. Y+1*K2
es lo mismo quehyK
.Pyth - 2 * 16 bytes - 10 = 22
Utiliza el método habitual de comprobación primaria en Pyth con el
!tP
y lo aplica tanto al número como a su primo seguro, con un pequeño truco para verificar ambos a la vez. Sube10^10
, así que voy por la bonificación.Explicación próximamente.Pruebe menos de 1000 en línea .
fuente
fuente
CJam, 34 (2 * 22-10)
Imprime todos los primos de Sophie Germain debajo
12 ** 9
, que incluye4294967681 > 2 ** 32
.Calculo que esto llevará aproximadamente 8 horas en mi máquina. Lo ejecutaré esta noche.
fuente
Haskell, 2 * 54-10 = 98
132i
Es un primer cheque.p
toma todos los númerosn
donde ambosn
y2*x+1
son primos.p
Es una lista infinita.Editar: mejor manera de verificar si
2*n+1
es primo.fuente
Julia, 2 * 49-10 = 88
Los imprime en formato de lista,
[2,3,5,11,...]
. Si ese formato, usar laprimes
función o esperar hasta que se realice todo el cálculo para imprimir, no es aceptable, esto los imprime uno por línea mientras se ejecuta.Es un poco más largo, 52 caracteres. Ambos calculan todos los primos de Sophie Germain
2^33
, por lo que deberían obtener el descuento de 10 puntos.fuente
Python 3,
124123 bytes¿Como funciona?
Pruébelo en línea aquí .
Mi computadora dice que ha generado 0.023283% de todos los primos de Sophie Germain por debajo de 2 ^ 32.
Cuando termine, lo publicaré en pastebin si hay suficientes líneas. Puedes usarlo para verificar que los tienes todos.
fuente
.5
es más corto que0.5
Perl, 2 * 57-10 = 104
42 segundos a 2 ^ 32, 1m26s a 2 ^ 33. Se ejecutará un 50% más rápido si
2*$_+1
está escrito como1+$_<<1
pero es un byte más.El módulo también se instala
primes.pl
y tiene muchos filtros, incluido uno para los primos de Sophie-Germain. Entonces:primes.pl --so 2**33
(20 bytes)fuente
Rubí, 61 * 2-10 = 112
Llevaría una eternidad imprimir todos los valores hasta 2 ** 32
Editar
Afeitado unos pocos bytes sustituyendo Float :: INFINITY por 1.0 / 0
fuente
PARI / GP, 46 * 2-10 = 82
fuente