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 trataIcomo un entero de 32 bits con signo, por lo que el valor máximo paraIes2 ** 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
PZno 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.!tPerrores0y1ser primo, ya que su factorización prima solo contiene 1 factor. La solución fácil es reemplazar todoZporKy asignarK2al principio.K1lugar deK2e intercambie el if y el incremento. De esta manera puedes eliminar el). Y+1*K2es lo mismo quehyK.Pyth - 2 * 16 bytes - 10 = 22
Utiliza el método habitual de comprobación primaria en Pyth con el
!tPy 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
132iEs un primer cheque.ptoma todos los númerosndonde ambosny2*x+1son primos.pEs una lista infinita.Editar: mejor manera de verificar si
2*n+1es primo.fuente
Julia, 2 * 49-10 = 88
Los imprime en formato de lista,
[2,3,5,11,...]. Si ese formato, usar laprimesfunció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
.5es más corto que0.5Perl, 2 * 57-10 = 104
42 segundos a 2 ^ 32, 1m26s a 2 ^ 33. Se ejecutará un 50% más rápido si
2*$_+1está escrito como1+$_<<1pero es un byte más.El módulo también se instala
primes.ply 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