Das am wenigsten verbreitete Vielfache einer Menge positiver Ganzzahlen A
ist die kleinste positive Ganzzahl, B
so dass für jedes k
in A
eine positive Ganzzahl existiert, n
so dass k*n = B
.
Geben Sie bei mindestens zwei positiven Ganzzahlen als Eingabe das kleinste gemeinsame Vielfache aus.
Regeln
- Builtins sind zulässig. Wenn Ihre Lösung jedoch eine verwendet, sollten Sie eine alternative Lösung einbeziehen, die keine GCD / LCM-Builtins verwendet. Die alternative Lösung wird jedoch nicht für Ihre Punktzahl angerechnet, so dass dies völlig optional ist.
- Alle Ein- und Ausgaben liegen innerhalb des für Ihre Sprache nativ darstellbaren Bereichs. Wenn Ihre Sprache von Haus aus zu beliebig großen ganzen Zahlen fähig ist, muss Ihre Lösung mit beliebig großen Ein- und Ausgängen arbeiten.
Testfälle
[7, 2] -> 14
[8, 1] -> 8
[6, 4, 8] -> 24
[8, 2, 1, 10] -> 40
[9, 6, 2, 1, 5] -> 90
[5, 5, 7, 1, 1] -> 35
[4, 13, 8, 8, 11, 1] -> 1144
[7, 2, 2, 11, 11, 8, 5] -> 3080
[1, 6, 10, 3, 4, 10, 7] -> 420
[5, 2, 9, 10, 3, 4, 4, 4, 7] -> 1260
[9, 7, 10, 9, 7, 8, 5, 10, 1] -> 2520
Antworten:
Eigentlich
121 ByteVorschläge zum Golfen sind immer noch willkommen, obwohl ich nicht sicher bin, wie ich das integrierte LCM verbessern kann. Probieren Sie es online!
Eine 12-Byte-Version ohne den eingebauten. Golfvorschläge sind willkommen. Probieren Sie es online!
Ungolfing
quelle
JavaScript (ES6), 36 Byte
Ausgehend von
1
der ersten Zahl, die durch alle geteilt werden kann.Code-Snippet anzeigen
quelle
some
recht erinnere, wird true zurückgegeben, wenn mindestens ein Element im Array die Bedingung erfüllt, oder?05AB1E / 2sable , 2 Bytes
Probieren Sie es online! in 05AB1E
oder 2sable
quelle
Gelee , 3 Bytes
Reduziert um LCM. Probieren Sie es online! oder überprüfen Sie alle Testfälle .
Alternative Version, 6 Bytes
Probieren Sie es online! oder überprüfen Sie alle Testfälle .
Wie es funktioniert
quelle
Python,
69655250 Bytes2 Bytes gespart dank Dennis!
Ziemlich einfache rekursive Lösung, Sie müssen das Rekursionslimit etwas erhöhen, damit einige der Testfälle funktionieren.
quelle
any
Nimmt einen Generator; Du brauchst die Klammern nicht.A=lambda l,i=1:all(i%a<1for a in l)or-~A(l,i+1)
spart ein paar Bytes mehr.MATL , 7 Bytes
Kein eingebaut.
Probieren Sie es online!
Erläuterung
Nehmen wir
[8, 2, 1, 10]
als Beispiel die Eingabe .EDIT (9. Juni 2017):
YF
mit zwei Ausgängen wurde in Release 20.1.0 geändert : Nicht-Faktor-Primzahlen und ihre (Null-) Exponenten werden übersprungen. Dies hat keinen Einfluss auf den obigen Code, der ohne Änderungen funktioniert.quelle
Julia (3 Bytes) [Arbeiten an nicht eingebauten]
Wie Dennis betonte, vergesse ich immer wieder, dass Julia Eingaben automatisch vektorisiert.
Beispiel:
quelle
PowerShell v2 +,
73 -60 ByteNimmt Eingaben auf
$a
, springt von$i=1
mit nach oben$i++
, basierend auf einer Bedingung. Die Bedingung wird($a|?{!($i%$_)}).count
sein-n
ote
qual zu$a.count
. Das heißt, die Schleife endet, wenn die Elemente$a
davon die Teiler von$i
sind, gleich den Elementen von sind$a
. Dann$i
bleibt ein Einzelgänger in der Pipeline und die Ausgabe ist implizit.Testfälle
quelle
Mathematica, 3 Bytes
Verwendung:
quelle
Cheddar, 33 Bytes
Nichts super Neues.
Ungolfed
Grundsätzlich beginnt dies bei eins und nimmt zu, bis ein LCM gefunden wird
quelle
JavaScript (ES6),
63 bis59 ByteFindet rekursiv die LCM der letzten beiden Elemente.
quelle
a=>a.reduce((l,n)=>l*n/(g=(m,n)=>n?g(n,m%n):m)(l,n))
Dyalog APL, 2 Bytes
Reduziert um LCM. Testen Sie es auf TryAPL .
quelle
JavaScript (ES6), 52 Byte
Ich habe
reduce
diese Antwort so oft ich konnte, aber ich werde offensichtlich nicht annähernd die Einfachheit von @Hedis Antwort erreichen.quelle
Java 8,
75,5912189 BytesVerwendet den euklidischen Algorithmus und die Tatsache, dass LCM (A, B) = A * B / GCD (A, B)
Code:
Zeilenumbrüche entfernen:
quelle
n->{...}
glaube ich, dass es gültig wird Java 8.int g(int a,int b){return b<1?a:g(b,a%b);}
. LCM kann dannint l(int[]a){int l=1;for(int n:a)l=l*n/g(l,n);return l;}
für insgesamt 99 Bytes werden.MATL , 3 Bytes
Dies verwendet die eingebaute Funktion mit Array-Eingabe.
Probieren Sie es online!
quelle
Brachylog , 17 Bytes
Probieren Sie es online!
Erläuterung
quelle
Perl 6 , 10 Bytes
im Grunde das gleiche wie:
quelle
J, 11 Bytes
Es gibt eine Lösung für 3 Bytes mit dem LCM Builtin.
Erläuterung
quelle
CJam,
181716 Bytes1 Byte gespart dank Martin Ender.
Inkrementieren, bis das LCM gefunden wurde.
Probieren Sie es online aus
quelle
Schläger 13 Bytes
lcm ist eine eingebaute Funktion in Racket:
Testen:
Ausgabe:
quelle
R, 36 Bytes (nicht eingebaut)
Übernimmt die Eingabe. Dann testet jede positive ganze Zahl mit dem Mod.
quelle
cat
um deine letztei
ec=T
ist gut für +4 anstatt +5 fürcat()
.v=scan();while(any((F=F+1)%%v)){};F
mitcat()
oderec=T
es 40 oder 39 Bytes zu machen, respectively. Und +1, sehr schöner Ansatz.Pyth, 9 Bytes
Ein Programm, das eine Liste in STDIN eingibt und das Ergebnis druckt.
Probieren Sie es online aus oder überprüfen Sie alle Testfälle
Wie es funktioniert
quelle
Haskell, 10 Bytes
Anwendungsbeispiel:
foldl1 lcm [5,2,9,10,3,4,4,4,7]
->1260
.quelle
C #, 50 + 18 = 68 Bytes
50 Bytes für die Definition der Methode, +18 Bytes für den LINQ-Import.
So ziemlich das Gleiche wie viele andere Antworten. Zählt rekursiv, bis das LCM gefunden wird. Ich war ein bisschen überrascht, dass es keine StackOverflowException gab, daher habe ich auch eine nicht rekursive Version, die eigentlich nur 1 Byte länger ist.
Ungolfed:
quelle
Pip , 10 Bytes
Verwendet die Strategie "Versuche jede Zahl, bis eine funktioniert". Probieren Sie es online!
quelle
PHP,
4274 Bytesgeradeaus:
Schleife
$f
von 1 aufwärts; wenn$f*$a
dividieren durch$b
ohne Rest wird das LCM gefunden.Ich hatte das total überlesen
at least
... hier ist der Code für eine beliebige Anzahl von Parametern:Schleife
$f
von 1 aufwärts, während die innere Schleife nicht auf $ argc gelaufen ist.Schleife
$i
von2
bis,$argc-1
während$f*$argv[1]
sich$argv[$i]
ohne Rest teilt .beide schleifen sind gebrochen: print
$f*$argument 1
.quelle
Prolog (SWI) , 46 Bytes
Probieren Sie es online!
Eine andere Lösung, 59 Bytes:
quelle
Python 3, 83 Bytes
quelle
Brachylog v2, 8 Bytes
Probieren Sie es online!
Es ist lustig, wie direkt dies auf die in der Herausforderung angegebene Definition abbildet.
Eine verdächtig langsame, aber deutlich kürzere Lösung:
Brachylog v2, 5 Bytes
Probieren Sie es online!
Übernimmt die Eingabe über die Ausgabevariable und gibt die Ausgabe über die Eingabevariable aus. Rippt die ersten vier Testfälle durch, aber ich warte immer noch auf den fünften ... Normalerweise würde ich es immer noch zu meiner primären Lösung machen und darauf vertrauen, dass es richtig funktioniert, aber ich weiß nicht, warum es nicht funktioniert bestätigte, dass 90 das LCM von ist,
9, 6, 2, 1, 5
als ich es 90 gab zwanzig Minuten ist, gab.(Edit: Es bestätigte die Antwort nach nicht mehr als 16 Stunden und erzeugte sie zusammen mit dem LCM
5, 5, 7, 1, 1
nach etwa zwei Tagen.)Und noch ein völlig anderes Prädikat, das aus Versehen die Brachylog v1-Lösung von Fatalize mehr oder weniger übersetzt:
Brachylog v2, 10 Bytes
Probieren Sie es online!
Dies wurde aus einer Lösung geborgen, die ich für diese Herausforderung entwickelt hatte, bevor mir klar wurde, dass die Ausgabe nicht auf eine Ganzzahl beschränkt war.
quelle
Pyth -
76 BytesKein eingebaut.
Probieren Sie es hier online aus .
quelle
[4]
oder irgendetwas anderes mit einem wiederholten Primfaktor.