Biorąc pod uwagę, że masz nieskończoną sekwencję liczb zdefiniowaną następująco:
1: 1 = 1
2: 1 + 2 = 3
3: 1 + 3 = 4
4: 1 + 2 + 4 = 7
5: 1 + 5 = 6
6: 1 + 2 + 3 + 6 = 12
7: 1 + 7 = 8
...
Sekwencja jest sumą dzielników n
, w tym 1 i n
.
Biorąc pod uwagę dodatnią liczbę całkowitą x
jako dane wejściowe, oblicz najniższą liczbę, n
która da wynik większy niż x
.
Przypadki testowe
f(100) = 48, ∑ = 124
f(25000) = 7200, ∑ = 25389
f(5000000) = 1164240, ∑ = 5088960
Oczekiwany wynik
Twój program powinien zwrócić zarówno n
sumę dzielników, jak i tak:
$ ./challenge 100
48,124
Zasady
Jest to kod-golf, więc wygrywa najkrótszy kod w bajtach w każdym języku.
n
dzielników s? Prawdopodobnie będziesz chciał to wyraźnie powiedzieć.n
if(n)
, ale nie mówisz tego nigdzie w specyfikacji.f(1000) = 48
?48
124
Odpowiedzi:
Brachylog , 9 bajtów
Ten program pobiera dane wejściowe z „zmiennej wyjściowej”
.
, a dane wyjściowe z „zmiennej wejściowej”?
. Wypróbuj online!Wyjaśnienie
Zmienna niejawna
N
jest wyliczana w kolejności rosnącej, więc dla wyniku używana jest jej najniższa dopuszczalna wartość.źródło
Galaretka ,
18121110 bajtówWypróbuj online!
-1 bajt dzięki Mr. Xcoder !
Jak to działa
źródło
1
jest to konieczne i jak¥
działa?1
Mówi,#
aby zacząć odliczanie od 1, a następnie¥
pobiera dwa poprzednie linki (Æs
i>
) i stosuje je jako diadę (tj. z dwoma argumentami), z lewym argumentem iteracją, a prawym argumentem wejściowym.#
w niektórych przypadkach był dla mnie trochę mylący.Wolfram Language (Mathematica) , 53 bajty
Wypróbuj online!
Próbuje wszystkich wartości od 2 do x + 1, gdzie x jest wartością wejściową.
(
Select
Zwraca listę wszystkich wartości, które działają, ale funkcja{#,f@#}&
przyjmuje je wszystkie jako dane wejściowe, a następnie ignoruje wszystkie dane wejściowe oprócz pierwszej.)źródło
R , 71 bajtów
Wypróbuj online!
źródło
x
.Łuska ,
1211 bajtów-1 bajt, dzięki @Zgarb!
Wypróbuj online!
źródło
,
to nie działa (lub wnioskowanie trwa zbyt długo?).R , 73 bajty
Wypróbuj online!
Outgolfed by duckmayr .
źródło
Japt , 15 bajtów
Spróbuj
Wyjaśnienie
Implicit input of integer
U
.[]
is our array wrapper. For the first element,@ }a
is a function that run continuously until it returns a truthy value, passing itself an incrementing integer (starting at 0) each time, and outputting the final value of that integer.â
gets the divisors of the current integer (X
),x
sums them and that result is assigned to variableV
.<
checks ifU
is less thanV
. The second element in the array is then justV
.źródło
Clojure, 127 bytes
Try it online!
thanks to @steadybox for -4 bytes!
źródło
reduce
can be replaced byapply
, also the functione
could be expressed as an anonymous function via the#(...)
syntax, you don't need to name it at Code Golf.#(=(rem n %)0)
is shorter than#(zero?(rem n %))
. And remember that,
is whitespace, and can be removed in this case as it is followed by(
, so it will be parsed correctly.Ruby, 58 bytes
Full program because I'm not sure if lambdas are allowed. /shrug
Try it online!
Explanation
źródło
JavaScript (ES6),
6158 bytesEdit: Saved 3 bytes thanks to @Arnauld.
źródło
05AB1E, 11 bytes
Try it online!
Leaves the output on the stack, as allowed per meta consensus. I added
)
for the sake of visualization, but the program also implicitly prints the top of the stack.źródło
APL (Dyalog), 32 bytes
Try it online!
⍵o⍺⍵.
źródło
SOGL V0.12, 14 bytes
Try it Here!
Explanation:
źródło
C,
7978 bytesTry it online!
źródło
i=s=!++n
instead of++n,i=s=0
MATL, 12 bytes
Try it online!
Explanation
źródło
Gaia, 11 bytes
Try it online!
Leaves the output on the stack, as allowed per meta consensus. I added
€.
for the sake of visualization, but the program also implicitly prints the top of the stack.źródło
Haskell, 59 bytes
-1 byte, thanks to @nimi!
Try it online!
źródło
Ohm v2, 11 bytes
Try it online!
źródło
Factor, 88
Brute-force search. It's a quotation (lambda),
call
it withx
on the stack, leavesn
andf(n)
on the stack.As a word:
źródło
Python 3, 163 bytes
źródło
noob
in particular ;)Python 3, 100 bytes
Try it online!
Thanks to Jonathan Frech's comment on the previous python 3 attempt, I have just greatly expanded my knowledge of python syntax. I'd never have thought of the -~i for i+1 trick, which saves two characters.
However, that answer is 1) not minimal and 2) doesn't work for x=1 (due to an off-by-one error which is easy to make while going for brevity; I suggest everyone else check their answers for this edge case!).
Quick explanation:
sum(i+1for i in range(y)if y%-~i<1)
is equivalent tosum(i for i in range(1,y+1)if y%i<1)
but saves two characters. Thanks again to Mr. Frech.d=lambda y:sum(i+1for i in range(y)if y%-~i<1)
therefore returns the divisors of y.f=lambda x:min((j,d(j))for j in range(x+1)if x<=d(j))
is where I really did work. Since comparing a tuple works in dictionary order, we can compare j,d(j) as easily as we can compare j, and this lets us not have to find the minimal j, store it in a variable, and /then/ compute the tuple in a separate operation. Also, we have to have the <=, not <, inx<=d(j)
, because d(1) is 1 so if x is 1 you get nothing. This is also why we needrange(x+1)
and notrange(x)
.I'd previously had d return the tuple, but then I have to subscript it in f, so that takes three more characters.
źródło
f=
as anonymous functions are perfectly acceptable here!f=
in your byte count, and is a good way to golf in Python. Check this for more golfing tips in Python!q=range
and replacingrange
withq
in both existing instances. Sadly, this doesn't improve it and since lambda is a keyword I can't use it for that, I'd have to do exec() tricks wasting too many characters.Python 2, 81 bytes
Try it online!
źródło
Java (OpenJDK 8), 91 bytes
Try it online! (timeout on third test case)
źródło
Perl 5, 60 + 1 (
-p
) = 61 bytesTry it online!
Output format:
sum-n
źródło
Clojure, 102 bytes
źródło
PHP, 69 bytes
źródło
Perl 6, 48 bytes
Try it online!
źródło