En este desafío planteado por xnor, se nos pidió implementar la multiplicación XOR. En este desafío, el objetivo es encontrar los primeros n
primos XOR. Los primos XOR son muy similares a los primos regulares como se puede ver en las siguientes definiciones:
Definición de número primo: un número positivo mayor que 1 que no puede formarse mediante la multiplicación de dos números, excepto mediante la multiplicación de 1 y de sí mismo.
Definición de XOR Prime: un número positivo mayor que 1 que no se puede formar a través de la multiplicación XOR de dos números, excepto a través de la multiplicación XOR de 1 y de sí mismo. Tenga en cuenta que los primos XOR componen la secuencia oeis A014580 .
La multiplicación XOR se define como la multiplicación binaria larga sin llevar. Puedes encontrar más información sobre la multiplicación de XOR en el desafío de xnor .
Entrada:
Un entero n
.
Salida:
Los primeros n
primos XOR.
Aquí están los primos XOR por debajo de 500:
2 3 7 11 13 19 25 31 37 41 47 55 59 61 67 73 87 91 97 103 109 115 117 131 137 143 145 157 167 171 185 191 193 203 211 213 229 239 241 247 253 283 285 299 301 313 319 333 351 355 357 361 369 375 379 391 395 397 415 419 425 433 445 451 463 471 477 487 499
F_2[x]
.Respuestas:
Pyth, 26 bytes
Demostración
Para probar si un número es un XOR-primo, generamos la tabla de multiplicación completa hasta ese número usando el algoritmo de aquí , y luego contamos cuántas veces aparece ese número. Si es exactamente 2, el número es primo.
Luego,
.f
devuelve los primeros n primos.fuente
Mathematica,
10099 bytesfuente
Pari / GP , 74 bytes
Guardado 4 bytes gracias a Charles .
Como señaló xnor, la multiplicación XOR es solo multiplicación en el anillo polinómicoF2[ x ] .
Pruébalo en línea!
Básicamente lo mismo que mi respuesta de Mathematica , pero PARI / GP tiene nombres de funciones más cortos.
fuente
n->p=0;while(n,if(polisirreducible(Mod(Pol(binary(p++)),2)),print(p);n--))
.Ceilán, 166 bytes
Por supuesto, esto no puede competir con Pyth & Co ...
Formateado:
Esto crea un número infinito de enteros (comenzando con 2), lo filtra comprobando si un número es un XOR-primo y toma los primeros
n
elementos de ese número.Este filtrado funciona haciendo un bucle sobre todos los elementos de 2 a m-1 (que son m-2), y verificando cada par si el producto xor da
m
. Si el iterable creado por eso está vacío,m
es un xor-prime y, por lo tanto, está incluido.El producto xor en sí mismo se calcula utilizando el mismo algoritmo (y casi el mismo código) que en mi respuesta para el cálculo del producto XOR .
fuente
Julia, 116 bytes
La función principal es la función anónima en la segunda línea. Llama a una función auxiliar
f
(que, por cierto, es mi sumisión para el desafío de xnor).Sin golf:
fuente