Najmniejszą wielokrotnością zbioru dodatnich liczb całkowitych A
jest najmniejsza liczba całkowita dodatnia, B
taka, że dla każdego k
z A
nich istnieje dodatnia liczba całkowita n
taka, że k*n = B
.
Biorąc pod uwagę co najmniej dwie dodatnie liczby całkowite jako dane wejściowe, wypisz ich najmniejszą wspólną wielokrotność.
Zasady
- Wbudowane są dozwolone, ale jeśli twoje rozwiązanie korzysta z jednego, zachęcamy do dołączenia alternatywnego rozwiązania, które nie korzysta z wbudowanych GCD / LCM. Jednak alternatywne rozwiązanie w ogóle nie będzie wliczane do wyniku, więc jest całkowicie opcjonalne.
- Wszystkie dane wejściowe i wyjściowe będą się mieścić w natywnie reprezentatywnym zakresie dla twojego języka. Jeśli twój język ma natywną zdolność do dowolnie dużych liczb całkowitych, wtedy twoje rozwiązanie musi działać z dowolnie dużymi wejściami i wyjściami.
Przypadki testowe
[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
Odpowiedzi:
Właściwie
121 bajtSugestie dotyczące gry w golfa są nadal mile widziane, chociaż nie jestem pewien, jak ulepszyć wbudowane surowe LCM. Wypróbuj online!
Wersja 12-bajtowa bez wbudowanego. Sugestie dotyczące gry w golfa mile widziane. Wypróbuj online!
Ungolfing
źródło
JavaScript (ES6), 36 bajtów
Począwszy od
1
pierwszej liczby, którą można podzielić przez wszystkich.Pokaż fragment kodu
źródło
some
zwraca true, jeśli przynajmniej jeden element w tablicy spełnia warunek, prawda?05AB1E / 2sable , 2 bajty
Wypróbuj online! w 05AB1E
lub 2sable
źródło
Galaretka , 3 bajty
Zmniejsza o LCM. Wypróbuj online! lub zweryfikuj wszystkie przypadki testowe .
Alternatywna wersja, 6 bajtów
Wypróbuj online! lub zweryfikuj wszystkie przypadki testowe .
Jak to działa
źródło
Python,
69655250 bajtów2 bajty zapisane dzięki Dennisowi!
Dość proste rozwiązanie rekurencyjne, aby niektóre przypadki testowe działały, należy nieco zwiększyć limit rekurencji.
źródło
any
bierze generator; nie potrzebujesz nawiasów.A=lambda l,i=1:all(i%a<1for a in l)or-~A(l,i+1)
oszczędza jeszcze kilka bajtów.MATL , 7 bajtów
Brak wbudowanego.
Wypróbuj online!
Wyjaśnienie
Weźmy
[8, 2, 1, 10]
za przykład przykład.EDYCJA (9 czerwca 2017 r.):
YF
Dwie wersje zostały zmodyfikowane w wersji 20.1.0 : liczby pierwsze nieczynnikowe i ich (zero) wykładniki są pomijane. Nie wpływa to na powyższy kod, który działa bez żadnych zmian.źródło
Julia (3 bajty) [Praca nad niewbudowanym]
Jak zauważył Dennis, zapominam, że Julia automatycznie wektoryzuje dane wejściowe.
Przykład:
źródło
PowerShell v2 +,
7360 bajtówPobiera dane wejściowe
$a
, zapętla w górę od$i=1
z$i++
, na podstawie warunkowej. Warunkiem jest($a|?{!($i%$_)}).count
bycie-n
ote
qual do$a.count
. Oznacza to, że pętla kończy się, gdy elementy,$a
które są dzielnikami,$i
są równe elementom$a
. Następnie$i
w rurociągu pozostaje samotnik , a wynik jest domyślny.Przypadki testowe
źródło
Mathematica, 3 bajty
Stosowanie:
źródło
Cheddar, 33 bajty
Nic super nowego.
Bez golfa
Zasadniczo zaczyna się od jednego i rośnie, aż znajdzie LCM
źródło
JavaScript (ES6),
6359 bajtówRekurencyjnie znajduje LCM dwóch ostatnich elementów.
źródło
a=>a.reduce((l,n)=>l*n/(g=(m,n)=>n?g(n,m%n):m)(l,n))
Dyalog APL, 2 bajty
Zmniejsza o LCM. Przetestuj na TryAPL .
źródło
JavaScript (ES6), 52 bajty
I
reduce
byłyby to odpowiedź tyle, ile mogłem, ale ja oczywiście nie zamierza zbliżyć prostocie @ odpowiedź Hedi za.źródło
Java 8,
755912189 bajtówWykorzystuje algorytm euklidesowy oraz fakt, że LCM (A, B) = A * B / GCD (A, B)
Kod:
Usuń podział linii:
źródło
n->{...}
uważam, że staje się ważny Java 8.int g(int a,int b){return b<1?a:g(b,a%b);}
. LCM może wtedy zostaćint l(int[]a){int l=1;for(int n:a)l=l*n/g(l,n);return l;}
w sumie 99 bajtów.MATL , 3 bajty
Wykorzystuje to wbudowaną funkcję z wejściem tablicowym.
Wypróbuj online!
źródło
Brachylog , 17 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
Perl 6 , 10 bajtów
w zasadzie taki sam jak:
źródło
J, 11 bajtów
Istnieje rozwiązanie dla 3 bajtów przy użyciu wbudowanego LCM.
Wyjaśnienie
źródło
CJam,
181716 bajtów1 bajt zapisany dzięki Martinowi Enderowi.
Zwiększanie aż do znalezienia LCM.
Wypróbuj online
źródło
Rakieta 13 bajtów
lcm to wbudowana funkcja w Racket:
Testowanie:
Wydajność:
źródło
R, 36 bajtów (nie wbudowane)
Pobiera dane wejściowe. Następnie przetestuj każdą dodatnią liczbę całkowitą, biorąc mod.
źródło
cat
swojego ostatniegoi
ec=T
jest w porządku dla +4 zamiast +5 dlacat()
.v=scan();while(any((F=F+1)%%v)){};F
zcat()
lubec=T
czyni on 40 lub 39 bajtów, odpowiednio. I +1, bardzo fajne podejście.Pyth, 9 bajtów
Program, który pobiera dane z listy na STDIN i drukuje wynik.
Wypróbuj online lub sprawdź wszystkie przypadki testowe
Jak to działa
źródło
Haskell, 10 bajtów
Przykład użycia:
foldl1 lcm [5,2,9,10,3,4,4,4,7]
->1260
.źródło
C #, 50 + 18 = 68 bajtów
50 bajtów na definicję metody, +18 bajtów na import LINQ.
Prawie tak samo jak wiele innych odpowiedzi. Zlicza rekurencyjnie, aż znajdzie LCM. Byłem trochę zaskoczony, że nie dostałem wyjątku StackOverflowException, więc mam także wersję nierekurencyjną, która jest w rzeczywistości tylko 1 bajt dłużej.
Nie golfowany:
źródło
Pip , 10 bajtów
Wykorzystuje strategię „wypróbuj każdą liczbę, aż zadziała”. Wypróbuj online!
źródło
PHP,
4274 bajtyprosto:
pętla
$f
od 1 w górę; jeśli$f*$a
dzieli się$b
bez reszty, LCM zostaje znalezione.Całkowicie przeczytałem
at least
... oto kod dla dowolnej liczby parametrów:Pętla
$f
od 1 w górę, podczas gdy pętla wewnętrzna nie uruchomiła się do $ argc.Pętla
$i
od2
do$argc-1
podczas gdy$f*$argv[1]
dzieli się$argv[$i]
bez reszty.obie pętle zepsute: drukuj
$f*$argument 1
.źródło
Prolog (SWI) , 46 bajtów
Wypróbuj online!
Inne rozwiązanie, 59 bajtów:
źródło
Python 3, 83 bajty
źródło
Brachylog v2, 8 bajtów
Wypróbuj online!
To zabawne, jak bezpośrednio przekłada się to na definicję podaną w wyzwaniu.
Podejrzanie powolne, ale znacznie krótsze rozwiązanie:
Brachylog v2, 5 bajtów
Wypróbuj online!
Pobiera dane wejściowe przez zmienną wyjściową i podaje dane wyjściowe przez zmienną wejściową. Przeszukuje pierwsze cztery przypadki testowe, ale wciąż czekam na piąte ... Zwykle nadal robiłbym to moje podstawowe rozwiązanie i po prostu wierzę, że działa poprawnie, ale nie wiem, dlaczego nie potwierdził, że 90 to LCM,
9, 6, 2, 1, 5
kiedy dałem go 90 dwadzieścia minut temu.(Edycja: potwierdziła odpowiedź po nie więcej niż 16 godzinach i wygenerowała ją obok LCM
5, 5, 7, 1, 1
po około dwóch dniach).I inny zupełnie inny predykat, który przypadkowo mniej więcej tłumaczy rozwiązanie Brachylog v1 firmy Fatalize:
Brachylog v2, 10 bajtów
Wypróbuj online!
To zostało uratowane z rozwiązania, dla którego stworzyłem tego wyzwania, zanim zdałem sobie sprawę, że wyjście nie jest ograniczone do liczby całkowitej.
źródło
Pyth -
76 bajtówBrak wbudowanego.
Wypróbuj online tutaj .
źródło
[4]
działa lub cokolwiek innego z powtarzającym się czynnikiem podstawowym.