Złożone sekwencje liczb
Zainspirowany tym pytaniem
Biorąc pod uwagę dodatnią liczbę całkowitą n , kod musi wypisać pierwsze n liczb całkowitych .
Wejście wyjście
Możesz napisać program lub funkcję. Dane wejściowe są przez STDIN lub argument funkcji, a dane wyjściowe to STDOUT lub wartość zwracana przez funkcję.
Dane wyjściowe mogą być List, Array lub String.
Przykłady
0 ->
1 -> 4
2 -> 4, 6
3 -> 4, 6, 8
13 -> 4, 6, 8, 9, 10, 12, 14, 15, 16, 18, 20, 21, 22
Zasady
Jak zawsze standardowe luki są niedozwolone.
Wbudowane generujące liczby pierwsze lub złożone są niedozwolone.
Wbudowane liczby pierwsze lub złożone są niedozwolone.
Odpowiedzi:
Pyth - 10 bajtów
Prawidłowa odpowiedź. Wykorzystuje twierdzenie Wilsona .
Wypróbuj online tutaj .
Stara odpowiedź
Pyth - 6 znaków
Używa wbudowanego do faktoryzacji liczb pierwszych , a nie sprawdzania liczb pierwszych.
Wypróbuj online tutaj .
źródło
Pyth, 11 bajtów
Generuje zbyt dużą listę produktów ze wszystkich kombinacji [2, n] i okrojonych.
źródło
1
lub2
.TeX, 382 bajty
Ponieważ możesz.
Liczba w ostatnim wierszu to liczba liczb zespolonych, które chcesz mieć.
Jest to prosty tester dzielników.
\d
sprawdza, czy#2
dzieli#1
.\i
wzywa\d
do wszystkich możliwych dzielników (tj. <#1
).\l
wyświetla pierwsze#2
liczby, dla których\i
zwraca 0.Wersja bez golfa (dobrze, pół golfa):
źródło
Python, 57
Mniej golfa:
Chodzi o to, aby wygenerować zestaw liczb zespolonych przez pomnożenie wszystkich par liczb naturalnych z wyjątkiem 0 i 1. Następnie posortuj ten zestaw i weź pierwsze
n
elementy. Wystarczy wziąć ze sobą kartezjański produkt zestawu{2, 3, ..., n+2}
, który możemy uzyskać,range(n)
zwiększając o 2.Do golfa to robimy klasyczny golfa trick przechowywania dwóch wartości
(a,b)
wrange(n)
postaci pojedynczej wartościk
wrange(n*n)
, i wyodrębnić je jakoa=k/n, b=k%n
.źródło
Java 8,
9897 bajtówRozszerzony, z płytą grzewczą:
źródło
R, 53 bajty
Jak to działa
Jest to również oparte na twierdzeniu Wilsona i wystarczy, że przejdzie przez zakres
1:n*n
i wyodrębni liczby zespolone zgodnie z wyżej wspomnianym twierdzeniem. Dodałem,+3
ponieważn*n
nie jest wystarczająco duży zasięg dlan < 3
liczb całkowitychJedynym problemem związanym z tym rozwiązaniem jest to, że (niestety) R traci precyzję dla wystarczająco dużego silnia, a zatem nie będzie działać poprawnie dla
n > 19
źródło
CJam,
2018 bajtówWypróbuj online
Nie używa żadnych wbudowanych operatorów liczb pierwszych ani faktoryzacji. Dość brutalna kontrola siły dla liczb złożonych.
Jedną z obserwacji, które tu zastosowano, jest to, że możemy łatwo obliczyć bezpieczną górną granicę dla liczb, które musimy przetestować. Ponieważ każda druga liczba większa niż 4 jest złożona,
4 + n * 2
jest górną granicą n-tej liczby złożonej.W oparciu o sugestię @Dennis najnowsza implementacja faktycznie wykorzystuje
n * 5
górną granicę, która jest znacznie mniej wydajna, ale o 2 bajty krótsza.Wyjaśnienie:
źródło
JavaScript ES6, 88 znaków
źródło
f=
jest legalne.n=>eval('for(r=[],q=2;r.length-n;/^(..+)\\1+$/.test("-".repeat(++q))&&r.push(q))r')
n&&!r[n-1]
: '| Jest tej samej długości cor.length<n
- jeden znak krótszy niżr.length!=n
- ale to ma być Code Golf, prawda? : -]Haskell,
4946 bajtówPrzykład użycia:
Jak to działa
źródło
F #, 78 bajtów
Wyjaśnione:
źródło
i
dwukrotnie. Nie znam się zbyt dobrze na F #, ale może nie mógłbyś użyćj
?C ++ 109
Nie golfił
źródło
while
przezfor
.Julia, 103 bajty
To wykorzystuje Twierdzenie Wilsona.
Nie golfowany:
źródło
ECMAScript 6 -
1079184 bajtówFunkcja zwraca tablicę pierwszych
n
liczb zespolonych.Stare wersje
Wynik
źródło
Haskell , 44 bajty
Mocno zainspirowany wcześniejszą odpowiedzią Nimi , zastępując predykat 2-bajtowym krótszym opartym na
any
bezdotykowej lambdzie zamiast na interpretacji listy zagnieżdżonej.Wypróbuj online!
( podziękowania dla Laikoni za dokładny link TIO)
Wyjaśnienie:
źródło