W tym wyzwaniu postawionym przez xnor poproszono nas o wdrożenie mnożenia XOR. W tym wyzwaniu celem jest znalezienie pierwszych n
liczb pierwszych XOR. Liczby pierwsze XOR są bardzo podobne do liczb pierwszych regularnych, co widać po następujących definicjach:
Definicja liczby pierwszej: Liczba dodatnia większa niż 1, której nie można utworzyć przez pomnożenie dwóch liczb, z wyjątkiem pomnożenia 1 i samego siebie.
Definicja XOR Prime: Liczba dodatnia większa niż 1, której nie można utworzyć przez pomnożenie przez XOR dwóch liczb, z wyjątkiem pomnożenia przez XOR 1 i samego siebie. Należy zauważyć, że liczby pierwsze XOR składają się na sekwencję Oeis A014580 .
Mnożenie XOR jest definiowane jako binarne długie mnożenie bez przenoszenia. Więcej informacji na temat mnożenia XOR znajdziesz w wyzwaniu xnor .
Wejście:
Liczba całkowita n
.
Wynik:
Pierwsze n
liczby pierwsze XOR.
Oto liczby pierwsze XOR poniżej 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]
.Odpowiedzi:
Pyth, 26 bajtów
Demonstracja
Aby sprawdzić, czy liczba jest liczbą pierwszą XOR, generujemy pełną tabliczkę mnożenia do tej liczby za pomocą algorytmu z tego miejsca , a następnie zliczamy, ile razy ta liczba się pojawia. Jeśli to dokładnie 2, liczba jest liczbą pierwszą.
Następnie
.f
zwraca pierwsze n liczb pierwszych.źródło
Mathematica,
10099 bajtówźródło
Pari / GP , 74 bajty
Zaoszczędź 4 bajty dzięki Charlesowi .
Wypróbuj online!
Zasadniczo to samo, co moja odpowiedź Mathematica , ale PARI / GP ma krótsze nazwy funkcji.
źródło
n->p=0;while(n,if(polisirreducible(Mod(Pol(binary(p++)),2)),print(p);n--))
.Ceylon, 166 bajtów
Oczywiście to nie może konkurować z Pyth & Co ...
Sformatowany:
Tworzy to nieskończoną iterowalną liczbę całkowitą (zaczynając od 2), filtruje ją, sprawdzając, czy liczba jest liczbą pierwszą XOR, i bierze jej pierwsze
n
elementy.Filtrowanie to polega na zapętlaniu wszystkich elementów od 2 do m-1 (które są m-2) i sprawdzaniu każdej pary, czy daje wynik xor
m
. Jeśli iterowalność utworzona przez to jest pusta,m
jest liczbą pierwszą xor i dlatego została uwzględniona.Sam produkt xor jest obliczany przy użyciu tego samego algorytmu (i prawie tego samego kodu), co w mojej odpowiedzi dla obliczenia produktu XOR .
źródło
Julia, 116 bajtów
Podstawową funkcją jest anonimowa funkcja w drugim wierszu. Wywołuje funkcję pomocnika
f
(która jest zresztą moim poddaniem się na wyzwanie xnora).Nie golfowany:
źródło