Biorąc pod uwagę dodatnią liczbę całkowitą n , oblicz wartość funkcji Mertensa M ( n ) gdzie
a μ ( k ) jest funkcją Möbiusa, gdzie μ ( k ) = 1, jeżeli k ma parzystą liczbę różnych czynników pierwszych, -1 jeśli k ma nieparzystą liczbę różnych czynników pierwszych, a 0, jeśli czynniki pierwsze nie są różne.
- To jest code-golf, więc stwórz najkrótszy kod dla funkcji lub programu, który oblicza funkcję Mertensa dla wejściowej liczby całkowitej n > 0.
- Jest to sekwencja OEIS A002321 .
Przypadki testowe
n M(n)
1 1
2 0
3 -1
4 -1
5 -2
6 -1
7 -2
8 -2
9 -2
10 -1
117 -5
5525 5
7044 -25
8888 4
10000 -23
Odpowiedzi:
Galaretka , 6 bajtów
Wypróbuj online! lub zweryfikuj mniejsze przypadki testowe . (Trwa chwilę)
tło
To korzysta z właściwości
z A002321 , co prowadzi do następującej rekurencyjnej formuły.
Jak to działa
źródło
Mathematica,
2220 bajtówDzięki @miles za zapisanie 2 bajtów.
Wyjaśnienie
Wygeneruj listę od 1 do wejścia.
Znajdź
MoebiusMu
każdy numerZsumuj wynik.
źródło
Python 2,
4537 bajtówPrzetestuj na Ideone .
tło
To korzysta z właściwości
z A002321 , co prowadzi do następującej rekurencyjnej formuły.
Jak to działa
Rekurencji używamy nie tylko do obliczenia M dla ilorazów, ale również do obliczenia sumy tych obrazów. Oszczędza to 8 bajtów na następnej, prostej implementacji.
Gdy f jest wywoływane z pojedynczym argumentem n , opcjonalny argument k ma domyślną wartość 2 .
Jeśli n = 1 ,
n<k
zwraca True, a f zwraca tę wartość. To jest nasz podstawowy przypadek.Jeśli n> 1 ,
n<k
początkowo zwraca False, a następnie następujeor
wykonanie następującego kodu .f(n/k)
rekurencyjnie oblicza jeden warunek sumy, który jest odejmowany od wartości zwracanejf(n,k+1)
. Ta ostatnia inkrementuje k i rekurencyjnie wywołuje f , iterując w ten sposób możliwe wartości k . Gdy n <k + 1 lub n = 1 ,f(n,k+1)
zwróci 1 , kończąc rekurencję.źródło
05AB1E ,
1615 bajtówWyjaśnienie
Wypróbuj online!
źródło
Brachylog ,
2220 bajtówWypróbuj online!
Wyjaśnienie
źródło
Galaretka , 9 bajtów
Wypróbuj online! lub zweryfikuj wszystkie przypadki testowe .
Jak to działa
źródło
Haskell,
2927 bajtówźródło
Galaretka , 7 bajtów
Niezbyt wydajny; determinanty są trudne.
Wypróbuj online! lub zweryfikuj mniejsze przypadki testowe . (Trwa chwilę)
tło
To używa wzoru z A002321 :
M (n) jest wyznacznikiem macierzy boolowskiej A n × n , gdzie a , j wynosi 1, jeżeli j = 1 lub i | j , w przeciwnym razie 0 .
Jak to działa
źródło
PHP, 113 bajtów
O ile mi wiadomo, php nie ma czegoś takiego jak funkcjonalność liczb pierwszych, więc jest to rodzaj bólu. Prawdopodobnie można to zrobić lepiej.
użyj jak:
źródło
Rakieta 103 bajty
Nie golfowany:
źródło
CJam (20 bajtów)
Demo online
Korzysta z formuły z OEIS
oraz operator memoisingu CJam
j
.Sekcja
źródło
JavaScript (ES6), 50 bajtów
Port odpowiedzi Pythona na @ Dennisa.
źródło
Julia,
2625 bajtówWypróbuj online!
tło
To korzysta z właściwości
z A002321 , co prowadzi do następującej rekurencyjnej formuły.
Jak to działa
Przedefiniowujemy jednego operatora ! do naszych celów.
n÷(2:n)
oblicza wszystkie wymagane ilorazy, nasze redefiniowane ! jest nad nimi odwzorowany, a na koniec odejmowana jest suma wszystkich wywołań rekurencyjnych od 1 .Niestety,
nie działa, ponieważ suma diadadowa dusi się w pustej kolekcji.
naprawia to, ale nie zapisuje żadnych bajtów i zwraca wartość True dla wejścia 1 .
źródło
C,
51 5047 bajtówEdycja: Dzięki @Dennis za -3 bajty!
źródło
Scala, 53 bajty
Port odpowiedzi pytona Dennisa.
Wywołałem metodę
?
, która jest tokenem, który nie przykleja się do liter.źródło
Pyth, 12 bajtów
Definiuje funkcję,
y
która przyjmujen
.Zestaw testowy tutaj. (Zauważ, że końcowym
y
tutaj jest wywołanie funkcji zadeklarowanej).źródło
Właściwie
181716 bajtówSugestie dotyczące gry w golfa mile widziane. Wypróbuj online!
Ungolfing
źródło
PARI / GP, 24 bajty
źródło
J, 19 bajtów
Oblicza funkcję Mertensa na
n
podstawie sumy funkcji Möbius w całym zakresie[1, n]
.Stosowanie
Wyjaśnienie
źródło