Biorąc pod uwagę dodatnią liczbę całkowitą n> 1, określ liczbę liczb, które można utworzyć, dodając liczby całkowite większe niż 1, której iloczyn jest n . Na przykład, jeśli n = 24 , możemy wyrazić n jako produkt na następujące sposoby
24 = 24 -> 24 = 24
24 = 12 * 2 -> 12 + 2 = 14
24 = 6 * 2 * 2 -> 6 + 2 + 2 = 10
24 = 6 * 4 -> 6 + 4 = 10
24 = 3 * 2 * 2 * 2 -> 3 + 2 + 2 + 2 = 9
24 = 3 * 4 * 2 -> 3 + 4 + 2 = 9
24 = 3 * 8 -> 3 + 8 = 11
W ten sposób możemy uzyskać następujące liczby:
24, 14, 11, 10, 9
To w sumie 5 liczb, więc nasz wynik to 5.
Zadanie
Napisz program lub funkcję, która przyjmuje n jako dane wejściowe i zwraca liczbę wyników, które można uzyskać w ten sposób.
To jest pytanie w golfa kodu, więc odpowiedzi będą oceniane w bajtach, przy czym mniej bajtów będzie lepszych.
Sekwencja OEIS
code-golf
math
factoring
code-challenge
sequence
polyglot
rosetta-stone
code-golf
string
browser
code-golf
date
code-golf
base-conversion
code-challenge
cops-and-robbers
hello-world
code-golf
cops-and-robbers
hello-world
Ad Hoc Garf Hunter
źródło
źródło
2,2,3,3 -> 10
,2,6,3 -> 11
,2,2,9 -> 13
,12,3 -> 15
,2,18 -> 20
,36 -> 36
(2*3)+(2*3)=12
powinno być również na liście.Odpowiedzi:
Brachylog , 8 bajtów
Wypróbuj online!
Wyjaśnienie
Nie jestem do końca pewien, dlaczego
~×
produkuje tylko listy z elementami powyżej 1, ale wydaje się, że tak, co świetnie sprawdza się w tym wyzwaniu.źródło
Gaia ,
91413 bajtówNaprawiony błąd kosztem 5 bajtów dzięki Jonathanowi Allanowi, a następnie 1 bajtowi.
Wypróbuj online! lub wypróbuj jako pakiet testowy
Wyjaśnienie
źródło
[6 6]
Galaretka ,
11 1514 bajtów+4 bajty naprawiające błąd (może lepszy sposób?)
-1 bajt przez nadużycie symetrii
Monadyczny link przyjmujący i zwracający dodatnie liczby całkowite
Wypróbuj online! lub zobacz pakiet testowy
W jaki sposób?
Aktualizuję ...
źródło
Python 2 , 206 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
Mathematica, 110 bajtów
źródło
JavaScript (ES6) 107 bajtów
Nie golfowany:
Przypadki testowe:
Pokaż fragment kodu
Aby sprawdzić, czy funkcja oblicza prawidłowe sumy, możemy wypisać klucze obiektu zamiast
t
:źródło
Python 3 , 251 bajtów
Wypróbuj online!
Projekt jest prosty:
podziel na czynniki pierwsze n na czynniki pierwsze (czynnik pierwszy może pojawić się kilka razy
16 -> [2,2,2,2]
:). To jest funkcjaf
.oblicz partycje z listy głównych czynników i pomnóż czynniki w każdej partycji. Partycje znajdują się jak w /programming//a/30134039 , a produkty są obliczane na bieżąco. To jest funkcja
t
.Ostateczna funkcja pobiera iloczyny każdej partycji n i sumuje je, uzyskuje liczbę różnych wartości.
Wynik dla
2310=2*3*5*7*11
jest49
.EDYCJA : Może wymaga naprawy, ale nie mam teraz czasu, aby na to spojrzeć (spieszy mi się). Wskazówka: czy wynik jest poprawny
2310=2*3*5*7*11
? Nie sądzę.EDIT2 : Ogromna poprawka. Patrz wyżej. Poprzednia (błędna) wersja to: Wypróbuj online!
f
oblicza współczynniki (z(0, n)
zamiast(1, n)
jako pierwszego elementu.Lambda dzieli każdy czynnik na „pod-czynniki” i sumuje te „pod-czynniki”.
źródło