Ilość wysoce kompozyt jest dodatnią liczbą całkowitą, która ma więcej niż którykolwiek dzielników mniejsze dodatnie liczby całkowitej. To jest sekwencja OEIS A002182 . Pierwsze 20 warunków to
1, 2, 4, 6, 12, 24, 36, 48, 60, 120, 180, 240, 360, 720, 840, 1260, 1680, 2520, 5040, 7560
Na przykład 4
jest w sekwencji, ponieważ ma 3 dzielniki (a mianowicie 1, 2, 4), podczas gdy 3 ma tylko 2 dzielniki, 2 ma również 2 dzielniki, a 1 ma 1 dzielniki.
Wyzwanie
Biorąc pod uwagę dodatnią liczbę całkowitą wejściową n , wypisz n-tą wysoce złożoną liczbę lub pierwsze n wysoce złożonych liczb, według własnego wyboru (ale wybór musi być taki sam dla każdego wejścia n ).
Zasady
Program lub funkcja powinna teoretycznie działać dla dowolnie dużych danych wejściowych, biorąc pod uwagę nieskończony czas i pamięć, bez uwzględnienia ograniczeń typów danych. Zasadniczo nie oznacza to zakodowania na stałe skończonej liczby wartości.
W praktyce program lub funkcja powinna działać w rozsądnym czasie, powiedzmy krócej niż 1 minutę, od n do 20. Maksymalne wejście lub wyjście może być ograniczone przez standardowy typ danych języka (ale znowu algorytm powinien teoretycznie działać dla dowolnie dużych liczb).
Dowolny rozsądny format wejściowy i wyjściowy jest dozwolony, w tym jednoargumentowy.
Kod golfa. Wygrywa najmniej bajtów.
źródło
Odpowiedzi:
05AB1E ,
1514 bajtówDane wejściowe są indeksowane od zera. Oznacza to, że
n = 0
daje1
,n = 1
daje2
itp. Kod:Wyjaśnienie:
Oblicza n = 19 , co powinno dać się
7560
za około 10 sekund.Wypróbuj online!
Wykorzystuje kodowanie CP-1252 .
źródło
Galaretka, 15 bajtów
Dla wejścia n drukowane jest pierwsze n wysoce złożonych liczb.
Dla n = 20 zajmuje mniej niż dwie sekundy. Wypróbuj online!
Jak to działa
Wersja alternatywna, 13 bajtów (niekonkurująca)
Podczas gdy poniższy kod działał w najnowszej wersji Jelly, która poprzedza to wyzwanie, wdrożenie
M
było bardzo wolne i nie było zgodne z terminem. Zostało to naprawione.Wypróbuj online!
Jak to działa
źródło
RÆDL€MḢ=µƓ#
(11 bajtów), ale na mojej maszynie zajmuje 44 minuty ...MATL ,
2624 bajtówWypróbuj online!
Aktualnie największa liczba znalezionych dzielników jest przechowywana w schowku K. Wysoko złożone liczby (HCN) są przechowywane bezpośrednio na stosie. Pętla testuje kandydatów do HCN. Po znalezieniu pozostawia się go na stosie, a schowek K jest aktualizowany. Pętla kończy się po znalezieniu żądanej liczby HCN.
źródło
Perl,
6057 + 1 = 58 bajtówWymaga
-n
i za darmo-M5.010
|-E
:Jak to działa:
źródło
JavaScript (ES6) 72
Prosta implementacja. Czas blisko 20 sekund na wejście 20
Sztuczka eval może zaoszczędzić bajt podwajający czas działania
Mniej golfa
źródło
Pyth,
1716 bajtów1 bajt dzięki Jakube
Zestaw testowy
Pobiera n indeksowane przez 0 i zwraca n-tą wysoce złożoną liczbę.
Wyjaśnienie:
źródło
Ruby,
706967666462Prosta implementacja.
źródło
C, 98 bajtów
Wypróbuj tutaj .
Bez golfa
źródło
Python 3, 97 bajtów
Pełny program, który pobiera dane wejściowe ze STDIN i drukuje dane wyjściowe do STDOUT. Zwraca to
n
wysoce złożoną liczbę th1 zindeksowaną.Jak to działa
Jest to prosta implementacja. Dane wejściowe
n
to wysoce złożony indeks liczb.Program iteruje po liczbach całkowitych
i
. Dla każdej liczby całkowitejj
poniżeji
,i mod j
są zastosowane; jeśli tak jest0
,j
musi być współczynnikiem,i
a licznikc
jest zwiększany, podając liczbę dzielnikówi
po zapętleniu.p
jest poprzednią najwyższą liczbą dzielników, więc jeślic > p
zostanie znaleziona nowa liczba bardzo złożona, a licznikq
zostanie zwiększony. Razq = n
,i
musi byćn
th liczba wysoce kompozyt, a ta jest drukowana.Wypróbuj na Ideone
(Trwa to około 15 sekund
n = 20
, co przekracza limit czasowy dla Ideone. Stąd podany przykład dotyczyn = 18
).źródło
Python 2, 207 bajtów
Używa tej samej metody, co odpowiedź Jelly'ego „Jelly”. Oblicza pierwsze 20 wyrazów w
<2
sekundach.źródło