0. DEFINICJE
Sekwencja znajduje się lista numerów. Seria jest sumą listy numerów.
Zbiór liczb naturalnych zawiera wszystkie „nieujemne liczby całkowite większe od zera”. Dzielnik (w tym kontekście) z liczbą naturalną j jest liczbą naturalną, i tak, że j ÷ i jest liczbą naturalną.
1. PREAMBUŁA
Kilka innych pytań na tej stronie wspomina o koncepcji podwielokrotności lub sekwencji dzielników liczby naturalnej a, które są mniejsze niż a . Wyznaczanie polubownych liczb polega na obliczeniu sumy tych dzielników, zwanej sumą alikwotu lub szeregiem alikwotu. Każda liczba naturalna ma własną sumę podwielokrotności, chociaż wartość sumy podwielokrotności liczby niekoniecznie jest unikalna dla tej liczby. ( Exempli gratia , każda liczba pierwsza ma podwielokrotną sumę 1).
2. WYZWANIE
Biorąc pod uwagę liczbę naturalną n
, zwróć n
trzecią cyfrę sekwencji sum podwielokrotności. Pierwsze kilka serii w sekwencji, zaczynając od serii dla 1, to:
{0, 1, 1, 3, 1, 6, 1, 7, 4, 8, 1, 16, 1, 10, 9, 15, 1, 21, 1, 22, 11, 14, 1, 36, 6, 16, 13}
Skonsolidowane wyglądają jak:
0113161748116110915121122111413661613
Dane wejściowe mogą być indeksowane od zera lub indeksowane jednokrotnie, zgodnie z własnymi preferencjami. Rozwiązania muszą być programami lub funkcjami zdolnymi do zwrócenia 10 000 cyfry (wejście do 9999
lub 10000
). Najkrótsze działające rozwiązanie wygrywa.
3. PRZYPADKI TESTOWE
Prawidłowe pary przepływów międzygałęziowych powinny obejmować między innymi następujące elementy:
0 or 1 -> 0
4 or 5 -> 1
12 or 13 -> 6
9999 or 10000 -> 7
Liczba poprzedzająca „lub” jest indeksowana 0; następujący numer jest indeksowany 1.
Dodatkowe przypadki testowe mogą być dostarczone na żądanie.
4. ODNIESIENIA
OEIS ma listę liczb i ich podwielokrotnych sum.
Odpowiedzi:
05AB1E ,
141110 bajtówOblicz n = 9999 w około 15 sekund. Kod:
Wyjaśnienie:
Wykorzystuje kodowanie CP-1252 . Wypróbuj online! .
źródło
Mathematica, 51 bajtów
Nienazwana funkcja, która przyjmuje i zwraca liczbę całkowitą oraz korzysta z indeksowania 1.
10000
Natychmiastowo obsługuje wprowadzanie .Wyjaśnienie
Jest to bardzo prosta implementacja definicji, wykorzystująca fakt, że pierwsze
n
sumy dzielnika są zawsze wystarczające do ustalenian
cyfry th. Jak zwykle kolejność czytania w matematyce golfowej jest nieco zabawna:Generuje to listę ze wszystkimi wynikami zastosowania nienazwanej funkcji po lewej stronie do wszystkich wartości
i
od1
don
włącznie.Zaczynamy od obliczenia dzielników
i
, zsumowania ichTr
i odjęciai
się, aby była to tylko suma dzielników mniejszych niżi
.To zamienia wynik w listę jego cyfr dziesiętnych.
I to usuwa nagłówek „listy”, dzięki czemu wszystkie listy cyfr są automatycznie łączone w wyniku
Array
. Aby uzyskać więcej informacji o tym##
, jak działa, zobacz sekcję „Sekwencje argumentów” w tym poście .Na koniec wybieramy
n
cyfrę th z wyniku.źródło
Brachylog , 40 bajtów
Jest to indeks 1, trwa około 0,15 sekundy
N = 100
, a 15 sekundN = 1000
. Aktualnie ubiegam sięN = 10000
, po zakończeniu raportuję czas działania (jeśli moje oszacowanie jest prawidłowe, powinno to zająć około 8 godzin)Edycja : poprzez naprawienie przedwczesnej propagacji ograniczeń w Brachylog, teraz (na kodzie o długości 3 bajtów) zajmuje około
2.5
minut,10000
ale zwracaout of global stack
błąd.Wyjaśnienie
Główny predykat:
Input = N
Predykat 1: oblicza sumę dzielników
Predykat 2: łączy dane wyjściowe z dzielnikiem danych wejściowych
źródło
-G
opcji. Domyślnie jest tylko128M
. Możesz użyć na przykład:swipl -G2G
aby użyć 2 GO.Pyth,
26212015 bajtówWypróbuj online. Zestaw testowy.
Wykorzystuje indeksowanie 0. Program ma wartość O (n²) i kończy się dla n = 9999 w ciągu około 14 minut na mojej maszynie z 2008 roku.
źródło
f!%dTr1d
jest znacznie krótszy (ale i wolniejszy)f!%TYtUT
to było to, co miałem.Galaretka,
131110 bajtów2 bajty dzięki @Adnan i 1 więcej dzięki @Dennis.
Wypróbuj online!
Wykorzystuje indeksowanie 1. Wykonuje dla n = 10000 w niecałe 2 sekundy online.
źródło
ÆDṖSDµ€Fị@
zapisuje bajt.€
to całego pierwszego łańcucha?€
jest stosowany dochain.pop() if chain else chains.pop()
. Nowo rozpoczęty łańcuch jest pusty, dlatego zamiast niego używany jest ostatni ukończony łańcuch.PHP, 90 bajtów
0 zindeksowanych
Absolutnie nie subtelny lub w sprytny sposób w ogóle do niego podejść.
Ponadto, jak zwykle, generuje trzy powiadomienia, które są ignorowane.
źródło
J , 34 bajty
Jest on indeksowany do zera i wykorzystuje poniższy wzór do obliczania sum dzielników.
Wyjaśnienie
źródło
MATL ,
1615 bajtówIndeksowanie jest oparte na 1.
Ostatni przypadek testowy przekroczył limit czasu w kompilatorze online, ale daje prawidłowy wynik w kompilatorze offline, w około 15 sekund.
Wypróbuj online!
źródło
Haskell, 52 bajty
Przykład użycia:
(([1..]>>= \n->show$sum[m|m<-[1..n-1],mod n m<1])!!) 12
->6
.Jest to bezpośrednia implementacja definicji: podziel
n
sumę na dzielniki i zamień na ciąg. Połącz wszystkie takie ciągi i wybierz element o żądanym indeksie. Lenistwo Haskella bierze tylko tylen
s z nieskończonej listy,[1..]
ile potrzeba.źródło
Python 3.5,
1039392 bajty:Dość prosta implementacja metody opisanej w poście.
Wypróbuj online! (Ideone)
Nie kończy się w ciągu 5 sekund w internetowym kompilatorze na wejście
10000
, ale kończy się na moim komputerze dla tego samego wejścia w ciągu około 8,5 sekundy.źródło
Oktawa, 71 bajtów
Ten jest tylko oktawowy. Nie będzie działać w MATLAB. Tworzona jest funkcja wirtualna, która działa na liczbach 1-indeksowanych. Prawdopodobnie można to nieco uprościć. Zobaczymy dziś wieczorem.
Możesz spróbować online tutaj .
Po prostu uruchom powyższą komendę, z prefiksem
a=
lub cokolwiek (tylko po to, abyś mógł użyć jej wiele razy), a następnie zróba(10000)
coś lub cokolwiek innego. Obliczenie, że 10000. cyfra to 7, zajmuje około 7 sekund.źródło
Java 8, 220 bajtów
Cóż, przynajmniej szybko. Średnio 0,3 sekundy zajmuje 9999/10000 element na mojej maszynie. Generuje tylko tyle alikwot, ile podałeś określony indeks. Oznacza to, że w większości przypadków łańcuch będzie nieco dłuższy niż indeks, ponieważ niektóre sumy podwielokrotności mają 2 lub więcej cyfr, ale w większości generuje tylko tyle, ile potrzebujemy.
Stosowanie:
Nie golfowany:
źródło