Funkcja Landaua ( OEIS A000793 ) podaje maksymalny porządek elementu grupy symetrycznej . Tutaj porządek permutacji jest najmniejszą dodatnią liczbą całkowitą tak że jest identycznością - która jest równa najmniejszej wspólnej wielokrotności długości cykli w rozkładzie cyklu permutacji. Na przykład co osiąga się na przykład przez (1,2,3) (4,5,6,7) (8,9,10,11,12,13,14).
Dlatego też, jest równa maksymalnej wartości gdzie 1 + ⋯ + k = n z o 1 , ... , K dodatnimi liczbami całkowitymi.
Problem
Napisz funkcję lub program, który oblicza funkcję Landaua.
Wejście
Dodatnia liczba całkowita .
Wynik
, maksymalna kolejność elementu grupy symetrycznej .
Przykłady
n g(n)
1 1
2 2
3 3
4 4
5 6
6 6
7 12
8 15
9 20
10 30
11 30
12 60
13 60
14 84
15 105
16 140
17 210
18 210
19 420
20 420
Wynik
To jest golf-golf : Wygrywa najkrótszy program w bajtach. (Niemniej mile widziane są najkrótsze wdrożenia w wielu językach).
Pamiętaj, że nie ma żadnych wymagań dotyczących czasu działania; dlatego twoja implementacja niekoniecznie musi być w stanie wygenerować wszystkie powyższe wyniki przykładowe w rozsądnym czasie.
Standardowe luki są zabronione.
źródło
Max[Apply@LCM/@IntegerPartitions@#]&
jestem zbyt obeznany z językiem - ale wydaje się, że działa dla mnie i dałby 36 bajtów, jeśli jest poprawny.Max[LCM@@@IntegerPartitions@#]&
dla 31 bajtów , ponieważ@@@
robi toApply
na poziomie 1.Python , 87 bajtów
Wypróbuj online!
Funkcja rekurencyjna, która śledzi pozostałe
n
do partycji i działającego LCMd
. Zauważ, że oznacza to, że nie musimy śledzić faktycznych liczb na partycji ani tego, ile z nich wykorzystaliśmy. Staramy każdy możliwy następna część,n-m
zastępującn
tym, co pozostałom
, id
zlcm(d,n-m)
. Bierzemy maksimum tych rekurencyjnych wyników id
siebie. Kiedy nic nie pozostajen=0
, wynik jest po prostud
.Problem polega na tym, że Python nie ma żadnych wbudowanych funkcji LCM, GCD ani faktoryzacji liczb pierwszych. Aby to zrobić
lcm(d,m-n)
, generujemy listę wielokrotnościd
i bierzemy wartość osiągającą minimalny modułn-m
, czylikey=(n-m).__rmod__
. Ponieważmin
poda wcześniejszą wartość w przypadku remisu, jest to zawsze pierwsza niezerowa wielokrotnośćd
podzielna przezn-m
, więc ich LCM. My tylko wielokrotnościd
, abyd*(n-m)
zagwarantować trafienie w LCM, ale krótsze jest pisanied<<n
(co jestd*2**n
), co wystarcza, gdy górne granice Pythona są wyłączne.math
Biblioteka Pythona 3 magcd
(ale nielcm
) po wersji 3.5, która jest kilka bajtów krótsza. Dzięki @Joel za skrócenie importu.Python 3.5+ , 84 bajty
Wypróbuj online!
Korzystanie
numpy
zlcm
jest jeszcze krótsze.Python z numpy , 77 bajtów
Wypróbuj online!
źródło
from math import*
to 85 bajtów, a użycieimport math
+math.gcd(...)
to 84 bajty. To samo dotyczynumpy
.numpy
„s długość 5 jest próg rentowności dlaimport*
.import numpy
ponieważnumpy.max
zastąpiłoby wbudowane Pythonmax
(to samo dlamin
), jeślifrom numpy import*
jest używane. Nie powoduje tu problemów, ale wszyscy wiemy, żeimport*
ogólnie nie jest to dobra praktyka programowania.import*
jest bez wątpienia złą praktyką, nie sądzę, że rzeczywiście nadpisuje Pythonamin
imax
tak zamieszanie byłby ktoś spodziewa funkcję NumPy i uzyskanie jednego bazowego.Haskell , 44 bajty
Wypróbuj online!
źródło
Galaretka , 7 bajtów
Wypróbuj online!
Łącze monadyczne przyjmujące za argument liczbę całkowitą i zwracające liczbę całkowitą.
Wyjaśnienie
źródło
JavaScript (ES6), 92 bajty
Wypróbuj online!
JavaScript (ES6), 95 bajtów
Wypróbuj online!
W jaki sposób?
Definiujemy:
(to jest A008475 )
Następnie używamy formuły (z A000793 ):
źródło
Perl 6 , 50 bajtów
Wypróbuj online!
Sprawdza bezpośrednio wszystkie permutacje, takie jak rozwiązanie Ruby @ histocrat.
Wyjaśnienie
1 Do sprawdzenia możemy użyć dowolnej sekwencji n różnych elementów, więc po prostu bierzemy permutację.
2 Jeśli punktem końcowym jest kontener,
...
operator sekwencji dopasowuje inteligentnie do pierwszego elementu. Musimy więc przekazać listę pojedynczego elementu.źródło
Rubinowy , 77 bajtów
Wypróbuj online!
(1..)
składnia nieskończonego zakresu jest zbyt nowa dla TIO, więc link ustawia dowolną górną granicę.Wykorzystuje to bezpośrednią definicję - wylicz wszystkie możliwe kombinacje, a następnie przetestuj każdą z nich, mutując,
a
aż wróci do swojej pierwotnej pozycji (co również wygodnie oznacza, że mogę po prostu mutować oryginalną tablicę w każdej pętli).źródło
Gaia ,
252322 bajtówWypróbuj online!
Brak partycji LCM lub liczb całkowitych powoduje, że takie podejście jest dość długie.
źródło
Haskell,
7067 bajtówWypróbuj online!
Edycja: -3 bajty dzięki @xnor.
źródło
mapM(:[1..n])
, ponieważ dodatkowy element jest nieszkodliwy.Python 3 + numpy,
11510299 bajtów-13 bajtów dzięki @Daniel Shepler
-3 więcej bajtów od @Daniel Shepler
Wypróbuj online!
Metoda brutalnej siły: znajdź wszystkie możliwe sekwencje a, b, c, ... gdzie a + b + c + ... = n, a następnie wybierz tę o najwyższym lcm.
źródło
c
aby zwrócić zestaw i zapamiętywać, nie robi to wcale źle (choć trzeba przyznać, że trochę nie działa): tio.run/##RY1BCsIwEEX3PUWWM1CLoiuhV/AKEsfUTkkmIU3AWnr2Ggvq7vM@//…Pyth ,
2415 bajtówWypróbuj online!
-9 bajtów: zwróciłem uwagę i zauważyłem, że Pyth ma wbudowaną funkcję GCD (
i
).źródło