Bibliotekarz przyłapał cię na oszukiwaniu w pracy za pomocą algorytmu sortowania , więc teraz jesteś karany. Nakazano ci utworzyć kod, aby bibliotekarz mógł wywrzeć wrażenie na obiekcie, którego nie odczuwał, uczuciu matematyki. Więc to , co „inne obowiązki przypisane” środków ...
Wszyscy znają naturalną sekwencję liczb w bazie 10, zwaną N :
0, 1, 2, 3, 4, 5, 6, ...
Na tej podstawie możemy wygenerować sekwencję liczb pierwszych, nazwijmy ją P , tak że każdy element w P ma dokładnie dwa dzielniki w N , a mianowicie 1
sam. Ta sekwencja to:
2, 3, 5, 7, 11, 13, ...
OK, jak na razie dość rutyny.
Bibliotekarz pomyślał o fajnej funkcji F (x, y), która pobiera liczbę x
z N , z warunkiem 0 <= x <= 9
i liczbę y
z N , i wstawia x
do y
rozwinięcia dziesiętnego w każdej pozycji (tj. Wstawianie, wstawianie lub dołączanie x
do y
), a następnie zwraca posortowany zestaw nowych liczb.
Na przykład F (6, 127) spowoduje
1267, 1276, 1627, 6127
Ale to wciąż trochę nudne. Bibliotekarz chce urozmaicić sprawę nieco bardziej , określając nową funkcję z -> {p : p in P and F(z,p) subset of P}
, posortowaną rosnąco.
Na przykład, z (7) byłoby
3, 19, 97, 433, 487, 541, ...
ponieważ 37
i 73
są zarówno pierwsi, jak 719
179
i 197
wszyscy pierwsi, itp.
Zauważ, że z (2) jest puste, ponieważ żadna liczba pierwsza z 2
dołączonym nigdy nie będzie pierwsza Podobnie dla {0,4,5,6,8}.
Twoim zadaniem jest napisanie kodu, który wygeneruje i wyśle pierwsze 100 liczb w sekwencji z (x) dla danego x .
Wejście
Pojedyncza liczba całkowita x taka, że 0 <= x <= 9
. Dane wejściowe można wprowadzać za pomocą argumentu funkcji, STDIN lub równoważnego.
Wynik
Sekwencja pierwszych 100 liczb, ograniczona przez wybór, do STDOUT lub równoważnej, tak że sekwencja spełnia z (x) jak opisano powyżej. Jeśli z (x) jest puste, tak jak w przypadku {0,2,4,5,6,8}, Empty Set
zamiast tego należy podać słowa .
Ograniczenia
- To jest kod-golf, ponieważ musisz zapisać to na kartę indeksową, aby bibliotekarz mógł pokazać nauczyciela matematyki, a twoja ręka łatwo się kurczy.
- Obowiązują standardowe ograniczenia luk. Bibliotekarz nie toleruje oszustów.
Sekwencje referencyjne
x = 1: A069246
x = 3: A215419
x = 7: A215420
x = 9: A215421
Powiązane: Znajdź największą kruchą liczbę pierwszą / Znajdź najmniejszą liczbę pierwszą z podłańcucha / Znajdź największą liczbę pierwszą, która wciąż jest liczbą pierwszą po usunięciu cyfry
"
jest niepotrzebną, ale bardzo przyjemną pracą.Python 3, 188 bajtów
Źle grał w golfa, ale na razie jest coś. Zamiast sprawdzania sprawdzamy
p in P and F(z,p) subset of P
, żep*f
jest to semiprime dla każdegof in F(z,p)
. Połącz to z podziałem prób na testy pierwotności, a otrzymaszO(scary)
algorytm.źródło
O(scary)
Perl, 124 bajty
Wymaga następującej opcji wiersza poleceń:,
-palMntheory=:all
liczone jako 16. Dane wejściowe pobrane ze standardowego wejścia.Zastosowania @DanaJ „s
Math::Prime::Util
moduł Perl (ładowany pragmientheory
). Zdobądź dzięki:is_prime
jest deterministyczny dla wszystkich wartości mniejszych niż 2 64 , co jest wystarczające dla naszych celów.Przykładowe użycie
Oczekiwane czasy działania
x = 1 : 1 m 09,2 s
x = 3 : 0 m 04,2 s
x = 7 : 2 m 52,5 s
x = 9 : 0 m 11,5 s
źródło
Pyth, 58
Ten zestaw testów oblicza tylko pierwsze 10 liczb, ponieważ wygenerowanie reszty zajmuje dużo czasu. Brute wymusza zarówno pierwotność, jak i wstawianie cyfr. Demonstruje tak niską wydajność, że nie byłem w stanie uruchomić jej do 100, więc proszę powiedz mi, jeśli są jakieś problemy.
źródło