Czasami, pisząc program, musisz użyć liczby pierwszej z jakiegoś powodu (np. Kryptografii). Zakładam, że czasami trzeba również użyć liczby złożonej. Czasami, przynajmniej tutaj na PPCG, twój program musi być w stanie poradzić sobie z dowolnymi zmianami. A w okolicznościach dogodnie zaprojektowanych, by zadać interesujące pytanie PPCG, być może nawet liczby, których używasz, muszą być odporne na korupcję…
Definicje
Liczba złożona jest liczbą całkowitą ≥ 4, która nie jest liczbą pierwszą, tzn. Jest iloczynem dwóch mniejszych liczb całkowitych większych niż 1. Liczbę złożoną odporną na bitflip definiuje się w następujący sposób: jest to dodatnia liczba całkowita dodatnia, dla której, jeśli ją napiszesz binarnie w minimalnej możliwej liczbie bitów, możesz zmienić dowolny jeden lub dwa bity z liczby, a liczba jest nadal złożona.
Przykład
Weźmy na przykład liczbę 84. Binarnie, to jest 1010100
. Oto wszystkie liczby, które różnią się o nie więcej niż 2 bity od tego:
0000100 4 2 × 2 0010000 16 4 × 4 0010100 20 4 × 5 0010101 21 3 × 7 0010110 22 2 × 11 0011100 28 4 × 7 0110100 52 4 × 13 1000000 64 8 × 8 1000100 68 4 × 17 1000101 69 3 × 23 1000110 70 7 × 10 1001100 76 4 × 19 1010000 80 8 × 10 1010001 81 9 × 9 1010010 82 2 × 41 1010100 84 7 × 12 1010101 85 5 × 17 1010110 86 2 × 43 1010111 87 3 × 29 1011000 88 8 × 11 1011100 92 4 × 23 1011101 93 3 × 31 1011110 94 2 × 47 1100100 100 10 × 10 1110000 112 8 × 14 1110100 116 4 × 29 1110101 117 9 × 13 1110110 118 2 × 59 1111100 124 4 × 31
Pierwsza kolumna to liczba binarna; druga kolumna to liczba dziesiętna. Jak wskazuje trzecia kolumna, wszystkie te liczby są złożone. Jako taki, 84 jest liczbą kompozytową odporną na bitflipy.
Zadanie
Musisz napisać jeden z następujących trzech programów lub funkcji, w zależności od tego, który z nich jest najbardziej odpowiedni dla twojego języka:
- Program lub funkcja, która przyjmuje nieujemną liczbę całkowitą n jako dane wejściowe i wysyła pierwsze n liczb zespolonych odpornych na bitflip.
- Program lub funkcja, która przyjmuje nieujemną liczbę całkowitą n jako dane wejściowe i wysyła wszystkie liczby zespolone odporne na bitflipy mniejsze niż n (lub, jeśli wolisz, mniejsze lub równe n , tzn. Możesz wybrać, czy n ma być dołączone do wyjścia, jeśli bitflip -odporny).
- Program lub funkcja, która nie pobiera danych wejściowych i wyświetla wszystkie liczby zespolone odporne na bitflipy. (Musi to wykorzystywać mechanizm wyjściowy zdolny do generowania danych wyjściowych podczas działania programu, taki jak drukowanie na standardowe wyjście, leniwa lista lub generator; nie można po prostu obliczyć całej listy, a następnie wydrukować ją.)
Przypadki testowe
Oto kilka pierwszych liczb kompozytowych odpornych na bitflip:
84, 184, 246, 252, 324, 342, 424, 468, 588, 636, 664, 670, 712, 730, 934, 958
Wyjaśnienia
- Tylko liczby, które produkujesz, muszą być odporne na bitflipy. Nie jest to zadanie polegające na uczynieniu programu odpornym na bitflipy; użyj dowolnych liczb w samym programie, które ci się podobają.
- Liczby, które podajesz, nie muszą być odporne na bitflip w „wiodących zerach”; wyobraź sobie, że liczby będą przechowywane w minimalnej możliwej liczbie bitów i tylko te bity muszą być odporne na przerzucanie. Jednak początkowe 1 bity liczb, które wyprowadzasz, muszą być odporne na bitflipy.
- Użyj dowolnego algorytmu, który ci się podoba, który daje właściwy wynik; nie jesteś tutaj oceniany pod względem wydajności.
- Jeśli możesz udowodnić, że istnieje wiele liczb kompozytowych odpornych na bitflipy, a) a) ograniczenia formatu wyjściowego zostaną zniesione, i b) dozwolone będzie twarde kodowanie listy (choć prawdopodobnie bardziej szczegółowe niż tylko obliczanie). Ta zasada służy głównie kompletności; Nie oczekuję, że to będzie istotne.
Warunek zwycięstwa
To jest golf golfowy , więc jak zwykle krótszy jest lepszy. Również, jak zwykle, długość programu będzie mierzona w bajtach.
n
jeślin
jest odporna na bitflip? (tzn. czy „mniej niż lub równa n”?)