Wprowadzenie
Prime Funkcja zliczania , znany również jako funkcja Pi , powraca się liczb pierwszych ilości mniejszej niż lub równą x.
Wyzwanie
Twój program przyjmie liczbę całkowitą x, którą możesz założyć jako dodatnią, i wyświetli jedną liczbę całkowitą równą liczbie liczb pierwszych mniejszej lub równej x. To wyzwanie dla golfa , więc zwycięzcą zostanie program z najmniejszą liczbą bajtów.
Możesz użyć dowolnego języka, który wybrałeś, pod warunkiem, że istniał przed tym wyzwaniem, ale jeśli język ma wbudowaną funkcję liczenia liczb pierwszych lub funkcję sprawdzania pierwotności (taką jak Mathematica), nie można użyć tej funkcji w kodzie .
Przykładowe dane wejściowe
Wejście:
1
Wyjście:
0
Wejście:
2
Wyjście:
1
Wejście:
5
Wyjście:
3
Odpowiedzi:
05AB1E , 3 bajty
Zakłada się, że dozwolone są wbudowane czynniki. Wypróbuj online!
Jak to działa
źródło
Python 2, 45 bajtów
Wykorzystuje generator liczb pierwszych Twierdzenia Wilsona . Produkt
p
śledzi(k-1)!^2
ip%k
wynosi 1 dla liczb pierwszych i 0 dla liczb niepierwszych.źródło
MATL ,
11, 10, 8, 5 bajtówWypróbuj online!
Napisałem wersję, która miała naprawdę fajne wyjaśnienie działania macierzy MATL:
:YF!s1=1
Ale to już nie ma znaczenia. Sprawdź historię zmian, jeśli chcesz ją zobaczyć.
Nowe wyjaśnienie:
Trzy bajty zaoszczędzone dzięki genialnemu rozwiązaniu Dennisa
źródło
YF!s1=s
Galaretka ,
85 bajtów3 bajty zapisane dzięki @Dennis!
Wypróbuj online!
Port odpowiedzi MATL DJMcMayhem (poprzednia wersja) udoskonalony przez Dennisa.
źródło
ÆE
, ponieważ każdy wykładnik odpowiada innemu współczynnikowi pierwszemu.RÆESL
osiąga właśnie to.!ÆEL
byłby jeszcze krótszy.Szablony MediaWiki z ParserFunctions , 220 + 19 = 239 bajtów
Aby wywołać szablon:
Ułożone w stylu Lisp:
Tylko podstawowy test pierwotności od 2 do n . Numery z trzech szelki wokół nich są zmienne, gdzie
{{{1}}}
jest n ,{{{2}}}
to liczba testowany,{{{3}}}
jest czynnikiem, który należy sprawdzić.źródło
Perl, 33 bajty
Obejmuje +1 dla
-p
Podaj numer wejściowy na STDIN
primecount.pl
Daje zły wynik,
0
ale to jest OK, operacja poprosiła o wsparcie tylko dla dodatnich liczb całkowitych.źródło
Retina, 31 bajtów
Liczba bajtów zakłada kodowanie ISO 8859-1. Konwertuj dane wejściowe na jednostkowe, generuj zakres od
1
don
, każdy w osobnej linii. Dopasuj liczby pierwsze.Wypróbuj online - Wprowadź znacznie większy niż 2800 limit czasu lub brak pamięci.
Referencje:
Generator zasięgu Martina
Główny sprawdzian Martina
źródło
Galaretka , 3 bajty
Wypróbuj online!
Jak to działa
źródło
Galaretka ,
13 11 10 9 8 76 bajtówBez
użycia wbudowanych funkcji pierwszych -1 bajt dzięki @miles (użyj tabeli)
-1 bajt dzięki @Dennis (konwertuj z unarnego na zliczanie dzielników)
TryItOnline
Lub zobacz pierwsze 100 terminów serii
n=[1,100]
, również na TryItOnlineW jaki sposób?
źródło
%þ`¬Sċ2
używając tabeli reszt.ḍþḅ1ċ2
zapisuje bajt.JavaScript (ES6),
4543 bajtówModyfikacja My
363533 bajtów funkcja pierwszości (1 bajt zapisywane @Neil, 2 przez @Arnauld)(Nie mogę tego nigdzie opublikować, ponieważ Czy ten numer jest liczbą pierwszą? Akceptuje tylko pełne programy ...)
Testowy fragment kodu
Pokaż fragment kodu
źródło
&
w środku swojej funkcji pierwotności.PowerShell v2 +, 98 bajtów
Uwaga: Jest to powolne dla dużych danych wejściowych.
Zasadniczo wyszukiwanie jednostronne z Czy liczba ta jest liczbą pierwszą? , w połączeniu z
for
pętlą i$j++
licznikiem. Trochę dodatkowej logiki z przodu, aby uwzględnić wkłady skrzynek krawędziowych1
oraz2
, ze względu na to, jak słupek ogrodzeniowy działa wfor
pętlach.źródło
05AB1E , 5 bajtów
Zakłada, że dozwolone są wbudowane czynniki pierwsze.
Kod:
Wyjaśnienie:
Wykorzystuje kodowanie CP-1252 . Wypróbuj online!
źródło
ÅPg
co by to było teraz, prawda?CJam , 7 bajtów
Wypróbuj online! Wykorzystuje funkcję faktoryzacji.
Wyjaśnienie:
źródło
Galaretka , 6 bajtów
Wykorzystuje tylko podstawową arytmetykę i twierdzenie Wilsona. Wypróbuj online! lub zweryfikuj wszystkie przypadki testowe .
Jak to działa
źródło
C # 5,0
7877Nie golfił
źródło
Pyth -
76 bajtówPonieważ inni używają głównych funkcji faktoryzacji ...
Pakiet testowy .
źródło
Bash + coreutils, 30
Ideone.
Bash + coreutils + pakiet gier BSD, 22
Ta krótsza odpowiedź wymaga posiadania zainstalowanego pakietu bsdgames:
sudo apt install bsdgames
.źródło
Pyke,
86 bajtówWypróbuj tutaj!
Dzięki Maltysen za nowy algorytm
źródło
C #, 157 bajtów
Pełny program z przypadkami testowymi:
Zaczyna chwilę, gdy przekroczysz 1 milion.
źródło
Matlab, 60 bajtów
Kontynuując moje przywiązanie do jednowierszowych funkcji Matlaba. Bez użycia wbudowanej faktoryzacji:
Biorąc pod uwagę, że liczba pierwsza
y
ma tylko dwa czynniki[1,y]
: liczymy liczby w zakresie,[1,x]
który ma tylko dwa czynniki.Zastosowanie faktoryzacji pozwala na znaczne skrócenie (do 46 bajtów).
Wniosek: Muszę przyjrzeć się im golfowym językom: D
źródło
Właściwie 10 bajtów
To było najkrótsze rozwiązanie, jakie znalazłem, i które nie napotkało błędów interpretera w TIO. Sugestie dotyczące gry w golfa mile widziane. Wypróbuj online!
Ungolfing
źródło
Galaretka , 3 bajty
Galaretka ma wbudowaną funkcję zliczania liczb pierwszych
ÆC
i funkcję sprawdzania liczb pierwszychÆP
, zamiast tego wykorzystuje wbudowaną funkcję generowania liczb pierwszychÆR
i przyjmuje długośćL
.Wydaje mi się, że jest to mniej więcej tak graniczne, jak użycie wbudowanych czynników pierwszej generacji, które również zajęłyby 3 bajty
!Æv
(!
czynnikowe,Æv
liczby pierwsze)źródło
PHP,
9692 bajtówOszczędność 4 bajtów dzięki Romanowi Gräfowi
Przetestuj online
Nie testowany kod testowy:
Przetestuj online
źródło
isInt(...)?1:0
a nie tylkoisInt(...)
APL (Dyalog Unicode) , 13 bajtów SBCS
Wypróbuj online!
⍳
d ndices 1…N⧽
∘.|
tabela reszty (używając tych dwóch jako osi)⍳
ɩ ndices 1… N0+.=
suma elementów równa zero (tj. ile dzielników ma każdy)2+.=
suma elementów równa się dwóm (tj. ile jest liczb pierwszych)źródło
Python 3, 40 bajtów
Dziwna liczba całkowita k jest liczbą pierwszą, jeśli tylko jeśli 2 ** (k-1) jest zgodne z 1 mod k. Tak więc sprawdzamy tylko ten warunek i dodajemy 1 dla przypadku k = 2.
źródło
MATL , 9 bajtów
Pozwala to uniknąć rozkładu pierwszorzędowego. Jego złożoność wynosi O ( n ²).
Wypróbuj online!
źródło
JavaScript (ES6),
50 + 246 + 243 bajtyZaoszczędzono
35 bajtów dzięki Neilowi:eval
może uzyskać dostęp don
parametru.Do
eval(...)
sprawdza czyn
jest liczbą pierwszą.Poprzednie rozwiązania:
liczba bajtów powinna wynosić +2, ponieważ zapomniałem nazwać funkcję
f=
(potrzebne do rekurencji)46 + 2 bajty (Zapisane 3 bajty dzięki produktom ETH):
50 + 2 bajty:
źródło
eval
może uzyskać dostęp don
parametru do funkcji (o której zapomniałeś nazwać, co kosztuje 2 bajty; dobrze wiedzieć, że nie jestem jedynym, który popełnia ten błąd), co pozwala zaoszczędzić 5 bajtów.eval
. Testowany z firefox, chrome i edge, działał dla mnie. Wyjaśnienie to eval () parsuje w kontekście instrukcji . Dwa przykłady:a=12;f=b=>eval('a + 5');f(8)
wyświetlacze17
ia=12;f=a=>eval('a + 5');f(8)
wyświetlacze13
.Java 7,102 bajtów
Brutalna siła
Nie golfił
źródło
1
. Obecnie zwraca1
zamiast0
. Możesz to naprawić, zmieniającreturn c;
nareturn n<2?0:c;
lub zmieniając,c=1,
na,c=n<2?0:1,
.q 35 bajtów
źródło
Właściwie 10 bajtów
Jeśli moja pierwsza odpowiedź jest niedozwolona za użycie funkcji generowania liczb pierwszych, oto odpowiedź rezerwowa z twierdzeniem Wilsona. Sugestie dotyczące gry w golfa mile widziane. Wypróbuj online!
Wypróbuj online
źródło