Zasady są proste:
- Pierwszych n liczb pierwszych (nie liczb pierwszych poniżej n ), należy wydrukować na standardowe wyjście oddzielone znakami nowej linii (liczby pierwsze należy wygenerować w kodzie)
- liczby pierwsze nie mogą być generowane przez wbudowaną funkcję lub przez bibliotekę , tj. użycie wbudowanej funkcji bibliotecznej, takiej jak: prime = get_nth_prime (n), is_a_prime (liczba) lub factorlist = lista_wszystkie_faktory (liczba) nie będzie bardzo kreatywna.
Punktacja - Powiedzmy, że definiujemy wynik = f ([liczba znaków w kodzie]), O ( f (n)) jest złożonością twojego algorytmu, gdzie n jest liczbą liczb pierwszych, które znajdzie. Na przykład, jeśli masz kod 300 znaków ze złożonością O (n ^ 2), wynik to 300 ^ 2 = 90000 , dla 300 znaków z O (n * ln (n)) wynik wynosi 300 * 5,7 = 1711.13 ( dla uproszczenia załóżmy, że wszystkie logi są logami naturalnymi)
Użyj dowolnego języka programowania, wygrywa najniższy wynik
Edycja: Problem został zmieniony z znajdowania „pierwszych 1000000 liczb pierwszych” na „pierwsze n liczb pierwszych” z powodu niejasności co do tego, czym jest „n” w O (f (n)), n oznacza liczbę znalezionych liczb pierwszych (znalezienie liczb pierwszych jest problem tutaj, a więc złożoność problemu zależy od liczby znalezionych liczb pierwszych)
Uwaga: aby wyjaśnić pewne nieporozumienia dotyczące złożoności, jeśli „n” oznacza liczbę liczb pierwszych, a „N” jest n-tą znalezioną liczbą pierwszą, złożoność pod względem n jest, a N nie jest równoważna, tj. O (f (n))! = O (f (N)) as, f (N)! = Stała * f (n) i N! = Stała * n, ponieważ wiemy, że n-ta funkcja pierwsza nie jest liniowa, chociaż odkąd znaleźliśmy „n” złożoność liczb pierwszych powinna być łatwo wyrażalna w kategoriach „n”.
Jak zauważył Kibbee, możesz odwiedzić tę stronę, aby zweryfikować swoje rozwiązania ( tutaj jest stara lista dokumentów Google)
Uwzględnij je w swoim rozwiązaniu -
jaki stopień złożoności ma Twój program (uwzględnij podstawową analizę, jeśli nie banalną)
długość znaku w kodzie
końcowy obliczony wynik
To jest moje pierwsze pytanie CodeGolf, więc jeśli w powyższych zasadach występuje błąd lub luka, proszę je wskazać.
1[\p:i.78498
moją odpowiedzią na to pytanie 1[\p:i.1000000
. Nawet zakładając, że wewnętrznym algorytmem podstawowym J jest O (n ^ 2), mój wynik wciąż wynosiłby tylko 196.
n
jest liczbą pierwszą, czy maksymalną liczbą pierwszą, i wszyscy ignorują fakt, że dodawanie liczb w zakresie 0..n
jest O(logn)
, a mnożenie i dzielenie są jeszcze droższe. Proponuję podać kilka przykładowych algorytmów wraz z ich poprawną złożonością.
O-tilde(k^6)
. Prowadzi to do wniosku, że każdy, kto twierdzi, że czas pracy jest lepszy, niż O-tilde(n ln n (ln(n ln n))^6)
źle zrozumiał część problemu; oraz na pytanie, jak należy sobie radzić ze O-tilde
złożonością w punktacji.