Wyzwanie
Biorąc pod uwagę dodatnią liczbę całkowitą, zwróć iloczyn dzielników, w tym siebie.
Jest to sekwencja A007955 w OEIS .
Przypadki testowe
1: 1 2: 2 3: 3 48 5: 5 6: 36 7: 7 8: 64 9:27 10: 100 12: 1728 14: 196 24: 331776 25: 125 28: 21952 30: 810000
Punktacja
To jest golf golfowy , więc wygrywa najkrótsza odpowiedź w każdym języku!
Odpowiedzi:
05AB1E , 2 bajty
Wypróbuj online!
Wyjaśnienie
źródło
Japt , 3 bajty
Wypróbuj online!
Wyjaśnienie
źródło
â
i×
pisząc tę odpowiedźGalaretka , 3 bajty
Wypróbuj online!
źródło
MATL , 3 bajty
Wypróbuj online!
źródło
Python 3 ,
4241 bajtówOszczędność 1 bajtu dzięki Leaky Nun!
Wypróbuj online!
źródło
(1,k)[i%k<1]
jest równoważnek**(i%k<1)
Haskell ,
3534 bajtów-1 dzięki ovs
Wypróbuj online!
źródło
Pyth , 6 bajtów
Zestaw testowy .
źródło
Alice , 12 bajtów
Wypróbuj online!
Wyjaśnienie
To tylko zwykłe ramy dla dziesiętnych operacji we / wy:
Następnie program to:
źródło
Neim , 2 bajty
Wypróbuj online!
źródło
R , 28 bajtów
Wypróbuj online!
źródło
Kod maszynowy x86-64, 26 bajtów
Powyższy kod definiuje funkcję, która przyjmuje pojedynczy parametr (wartość wejściowa, dodatnia liczba całkowita) w
EDI
(zgodnie z konwencją wywoływania AMD V System64 używaną w Gnu / Unix) i zwraca pojedynczy wynik (iloczyn dzielników)EAX
.Wewnętrznie oblicza iloczyn dzielników za pomocą (wyjątkowo nieefektywnego) algorytmu iteracyjnego, podobnego do złożenia C przez pizzapants184 . Zasadniczo używa licznika do przechodzenia przez wszystkie wartości między 1 a wartością wejściową, sprawdzając, czy bieżąca wartość licznika jest dzielnikiem wejścia. Jeśli tak, mnoży to przez działający produkt ogółem.
Mnemoniki języka asemblera:
Fakt, że
IDIV
instrukcja używa zakodowanych operandów do dywidendy, trochę obciąża mój styl, ale myślę, że jest to całkiem dobre dla języka, który nie ma wbudowanych, ale podstawowe gałęzie arytmetyczne i warunkowe!źródło
TI-Basic (TI-84 Plus CE), 24 bajty
Pełny program: monituje użytkownika o wprowadzenie danych; zwraca dane wyjściowe
Ans
, specjalną zmienną, która (w zasadzie) przechowuje wartość ostatniej obliczonej wartości.Wyjaśnienie:
źródło
C (gcc),
5248 bajtów-4 bajty dzięki Cody Grayowi
Funkcja, która przyjmuje liczbę całkowitą i zwraca iloczyn dzielników.
Wypróbuj online!
Nie golfowany:
źródło
p*=
wyrażenia i (3) umieszczenie instrukcji w treścifor
pętli, aby usunąć przecinek. Lubię też używać globalnych zmiennych, zamiast dodawać dodatkowe parametry. Pozwala to uniknąć nieokreślonego zachowania, nie kosztując żadnych bajtów. Wersja ostateczna:p,a;f(x){for(p=1,a=x;a;--a)p*=x%a?1:a;return p;}
return p;
zp=p;
zaoszczędzisz pięciu bajtów.p,a;f(x)
zf(x,p,a)
.return p;
i zaoszczędzić nie pięć, ale dziewięć bajtów. ( TIO )JavaScript (ES7), 32 bajty
Zaoszczędzono kilka bajtów, pożyczając wskazówkę Leaky'ego dotyczącą rozwiązania Python dla muzyków .
Spróbuj
Alternatywnie (ES6), 32 bajty
źródło
(n%i?1:i)
? (Nie zaoszczędziłoby to jednak żadnego bajtu.)TI-Basic,
241413 bajtówZaoszczędzono 1 bajt dzięki lirtosiast
źródło
int(
?QBIC , 22 bajty
Wyjaśnienie
źródło
Pari / GP , 18 bajtów
Wypróbuj online!
źródło
PHP , 45 bajtów
Wypróbuj online!
źródło
Mathematica, 17 bajtów
dla tych, którzy nie mogą wyświetlić usuniętych odpowiedzi (odpowiedź DavidC), jest to kod w Mathematica z pomocą @MartinEnder
źródło
Język programowania Szekspira , 353 bajty
Wersja bez golfa:
Używam tego kompilatora SPL do uruchomienia programu.
Biegnij z:
źródło
Python 3, 45 bajtów
lambda _:_**(sum(_%-~i<1for i in range(_))/2)
Niech
x
będzie liczbą. Obay
iz
będą dzielnikamix
ify * z = x
. Dlatego teży = x / z
. Powiedzmy, że liczbad
ma 6 divisiors, dzięki tej obserwacji dzielników będziea
,b
,c
,d / a
,d / b
,d / b
. Jeśli pomnożymy wszystkie te liczby (punkt układanki), otrzymamyd * d * d = d ^ 3
. Ogólnie rzecz biorąc, ponieważe
w przypadku wieluf
dzielników będzie iloczyn wspomnianych dzielnikówe ^ (f / 2)
, co robi lambda.Wypróbuj online!
źródło
MY , 4 bajty
Klątwa:
Wyjaśnienie:
źródło
Java (OpenJDK 8) ,
5251 bajtówWypróbuj online!
Dzięki LeakyNun za uratowanie 1 bajtu!
źródło
n->{int r=n,d=0;for(;++d<n;)r*=n%d<1?d:1;return r;}
RProgN 2 , 2 bajty
Inny język z wbudowanymi funkcjami dla
divisors
iproduct
.Wypróbuj online!
źródło
Perl 6 , 22 bajtów
Wypróbuj online!
źródło
J, 19 bajtów
Wyjaśnienie nastąpi później ...
Wypróbuj online!
źródło
Oktawa , 27 bajtów
Definiuje to anonimową funkcję.
Wypróbuj online!
źródło
Python 2 ,
5250 bajtówm*=n%i>0 or i
Wypróbuj online!
źródło
Fortran 95, 88 bajtów
Wypróbuj online!
Nie golfowany:
źródło
Aksjomat, 23 bajty
To tłumaczenie na aksjomat roztworu alphalpha
źródło