Vorausgesetzt, Sie haben eine unendliche Folge von Zahlen wie folgt definiert:
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
...
Die Folge ist die Summe der Teiler von n
, einschließlich 1 und n
.
x
Berechnen Sie bei einer positiven Ganzzahl als Eingabe die niedrigste Zahl, n
die ein Ergebnis größer als ergibtx
.
Testfälle
f(100) = 48, ∑ = 124
f(25000) = 7200, ∑ = 25389
f(5000000) = 1164240, ∑ = 5088960
Erwartete Ausgabe
Ihr Programm sollte beides n
und die Summe seiner Teiler zurückgeben, wie folgt:
$ ./challenge 100
48,124
Regeln
Dies ist Code-Golf, so dass der kürzeste Code in Bytes in jeder Sprache gewinnt.
n
s-Teiler? Sie werden das wahrscheinlich explizit angeben wollen.n
undf(n)
, aber Sie sagen es nirgendwo in der Spezifikation.f(1000) = 48
? Die Divisorsumme von48
is124
Antworten:
Brachylog , 9 Bytes
Dieses Programm nimmt Eingaben von der "Ausgangsvariablen"
.
und gibt sie an die "Eingangsvariable" aus.?
. Probieren Sie es online!Erläuterung
Die implizite Variable
N
wird in aufsteigender Reihenfolge aufgelistet, sodass der niedrigste zulässige Wert für die Ausgabe verwendet wird.quelle
Jelly ,
18121110 BytesProbieren Sie es online!
-1 Byte danke an Herrn Xcoder !
Wie es funktioniert
quelle
1
notwendig ist und wie es sich¥
verhält?1
sagt#
aus 1 Zählen zu beginnen und der¥
nimmt die vorherigen zwei Verbindungen (Æs
und>
) und wendet sich als Dyade (dh mit zwei Argumenten), wobei das linke Argument der Iteration zu sein, und das rechte Argument des Eingang ist.#
war mir schon mal ein bisschen verwirrt gewesen.Wolfram Language (Mathematica) , 53 Byte
Probieren Sie es online!
Versucht alle Werte zwischen 2 und x + 1, wobei x die Eingabe ist.
(Das
Select
gibt eine Liste aller Werte zurück, die funktionieren, aber die Funktion{#,f@#}&
nimmt all diese als Eingaben und ignoriert dann alle Eingaben außer der ersten.)quelle
R , 71 Bytes
Probieren Sie es online!
quelle
x
.Schale ,
1211 Bytes-1 Byte, danke an @Zgarb!
Probieren Sie es online!
quelle
,
geht das nicht (oder dauert die Inferenz zu lange?).R , 73 Bytes
Probieren Sie es online!
Von duckmayr outgolfed .
quelle
Japt, 15 bytes
Try it
Explanation
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
.quelle
Clojure, 127 bytes
Try it online!
thanks to @steadybox for -4 bytes!
quelle
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
quelle
JavaScript (ES6),
6158 bytesEdit: Saved 3 bytes thanks to @Arnauld.
quelle
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.quelle
APL (Dyalog), 32 bytes
Try it online!
⍵o⍺⍵.
quelle
SOGL V0.12, 14 bytes
Try it Here!
Explanation:
quelle
C,
7978 bytesTry it online!
quelle
i=s=!++n
instead of++n,i=s=0
MATL, 12 bytes
Try it online!
Explanation
quelle
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.quelle
Haskell, 59 bytes
-1 byte, thanks to @nimi!
Try it online!
quelle
Ohm v2, 11 bytes
Try it online!
quelle
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:
quelle
Python 3, 163 bytes
quelle
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.
quelle
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!
quelle
Java (OpenJDK 8), 91 bytes
Try it online! (timeout on third test case)
quelle
Perl 5, 60 + 1 (
-p
) = 61 bytesTry it online!
Output format:
sum-n
quelle
Clojure, 102 bytes
quelle
PHP, 69 bytes
quelle
Perl 6, 48 bytes
Try it online!
quelle