Die Landausche Funktion ( OEIS A000793 ) gibt die maximale Ordnung eines Elements der symmetrischen Gruppe . Hier ist die Ordnung einer Permutation die kleinste positive ganze Zahl so dass die Identität ist - die gleich dem kleinsten gemeinsamen Vielfachen der Länge der Zyklen in der Zykluszerlegung der Permutation ist. Zum Beispiel ist was zum Beispiel durch (1,2,3) (4,5,6,7) (8,9,10,11,12,13,14) erreicht wird.S n π k π k g ( 14 ) = 84
Daher ist auch gleich dem Maximalwert von wobei mit positiven ganzen Zahlen.
Problem
Schreiben Sie eine Funktion oder ein Programm, das die Funktion von Landau berechnet.
Eingang
Eine positive ganze Zahl .
Ausgabe
die maximale Ordnung eines Elements der symmetrischen Gruppe .
Beispiele
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
Ergebnis
Das ist Code-Golf : Das kürzeste Programm in Bytes gewinnt. (Trotzdem sind kürzeste Implementierungen in mehreren Sprachen erwünscht.)
Beachten Sie, dass keine Anforderungen an die Laufzeit gestellt werden. Daher muss Ihre Implementierung nicht unbedingt in der Lage sein, alle oben genannten Beispielergebnisse in einer angemessenen Zeit zu generieren.
Standardlücken sind verboten.
quelle
Max[Apply@LCM/@IntegerPartitions@#]&
scheint aber für mich zu funktionieren und würde 36 Bytes geben, wenn es korrekt ist.Max[LCM@@@IntegerPartitions@#]&
für 31 Bytes tun , da@@@
diesApply
bei Stufe 1 der Fall ist.Python , 87 Bytes
Probieren Sie es online!
Eine rekursive Funktion, die die verbleibende
n
Partition und den laufenden LCM verfolgtd
. Beachten Sie, dass dies bedeutet, dass wir nicht die tatsächlichen Zahlen in der Partition verfolgen müssen oder wie viele von ihnen wir verwendet haben. Wir probieren jeden möglichen nächsten Teil aus undn-m
ersetzen ihnn
durch den Restm
undd
durchlcm(d,n-m)
. Wir nehmen das Maximum dieser rekursiven Ergebnisse undd
sich. Wenn nichts bleibtn=0
, ist das Ergebnis gerechtd
.Das Schwierige ist, dass Python keine eingebauten Funktionen für LCM, GCD oder Primfaktor-Faktorisierung hat. Dazu erstellen
lcm(d,m-n)
wir eine Liste mit Vielfachen vond
und nehmen den Wert, der das Minimum-Modulon-m
erreicht, mit demkey=(n-m).__rmod__
. Damin
im Falle eines Gleichstands der frühere Wert angegeben wird, ist dies immer das erste Nicht-Null-Vielfached
, das durch teilbar istn-m
, also deren LCM. Wir haben nur ein Vielfaches vond
demd*(n-m)
, was garantiert ist, um das LCM zu treffen, aber es ist kürzer zu schreibend<<n
(d*2**n
was genügt) , wenn Pythons obere Schranken exklusiv sind.Die
math
Bibliothek von Python 3 hatgcd
(aber nichtlcm
) nach 3.5, was einige Bytes kürzer ist. Vielen Dank an @Joel für die Verkürzung des Imports.Python 3.5+ , 84 Bytes
Probieren Sie es online!
Mit
numpy
‚slcm
ist noch kürzer.Python mit Zahl , 77 Bytes
Probieren Sie es online!
quelle
from math import*
ist 85 Bytes und usingimport math
+math.gcd(...)
ist 84 Bytes. Gleiches gilt fürnumpy
.numpy
Die Länge von 5 ist der Break-Even-Punkt fürimport*
.import numpy
danumpy.max
sie Pythons eingebautesmax
(dasselbe fürmin
) außer Kraft setzt, wennfrom numpy import*
es verwendet wird. Es verursacht hier keine Probleme, aber wir alle wissen, dass diesimport*
im Allgemeinen keine gute Programmierpraxis ist.import*
ist zwar zweifellos eine schlechte Übung, aber ich glaube nicht, dass sie Pythonsmin
und überschreibt. Diemax
Verwirrung ist also, dass jemand die Funktion von NumPy erwartet und die Basis erhält.Haskell , 44 Bytes
Probieren Sie es online!
quelle
Gelee , 7 Bytes
Probieren Sie es online!
Ein monadischer Link, dessen Argument eine Ganzzahl ist und der eine Ganzzahl zurückgibt.
Erläuterung
quelle
JavaScript (ES6), 92 Byte
Probieren Sie es online!
JavaScript (ES6), 95 Byte
Probieren Sie es online!
Wie?
Wir definieren:
(das ist A008475 )
Dann verwenden wir die Formel (ab A000793 ):
quelle
Perl 6 , 50 Bytes
Probieren Sie es online!
Überprüft alle Permutationen direkt, z. B. die Ruby-Lösung von @ histocrat.
Erläuterung
1 Wir können eine beliebige Folge von n verschiedenen Elementen für die Prüfung verwenden, also nehmen wir einfach die Permutation selbst.
2 Wenn der Endpunkt ein Container ist,
...
stimmt der Sequenzoperator mit dem ersten Element überein. Wir müssen also eine Einzelelementliste übergeben.quelle
Ruby , 77 Bytes
Probieren Sie es online!
(1..)
Die unendliche Bereichssyntax ist für TIO zu neu, daher legt der Link eine willkürliche Obergrenze fest.Hierfür wird die direkte Definition verwendet - alle möglichen Permutationen auflisten und jede durch Mutation testen,
a
bis sie wieder an ihrer ursprünglichen Position ist (was auch bequem bedeutet, dass ich das ursprüngliche Array in jeder Schleife einfach mutieren kann).quelle
Gaia ,
252322 BytesProbieren Sie es online!
Ohne LCM- oder Integer-Partitionen ist dieser Ansatz ziemlich lang.
quelle
Haskell,
7067 BytesProbieren Sie es online!
Edit: -3 Bytes dank @xnor.
quelle
mapM(:[1..n])
, da das zusätzliche Element harmlos ist.Python 3 + Anzahl,
11510299 Bytes-13 Bytes dank @Daniel Shepler
-3 weitere Bytes von @Daniel Shepler
Probieren Sie es online!
Brute-Force-Methode: Finde alle möglichen Sequenzen a, b, c, ... mit a + b + c + ... = n und wähle dann die mit den höchsten lcm.
quelle
c
einen Satz zurück und memoize es nicht schlecht überhaupt nicht tun (obwohl zugegebenermaßen tut es ungolf ein bisschen): tio.run/##RY1BCsIwEEX3PUWWM1CLoiuhV/AKEsfUTkkmIU3AWnr2Ggvq7vM@//...Pyth ,
2415 BytesProbieren Sie es online!
-9 Bytes: beachtet und bemerkt, dass Pyth tatsächlich eine eingebaute GCD hat (
i
).quelle