Return the nth digit of the sequence of aliquot series
Mathematica, 51 bytes
Array[##&@@IntegerDigits[Tr@Divisors@#-#]&,#][[#]]&
An unnamed function which takes and returns an integer and uses 1-based indexing. Handles input 10000
instantly.
Explanation
This is a very straight-forward implementation of the definition, making use of the fact that the first n
divisor sums are always enough to determine the n
th digit. As usual, the reading order of golfed Mathematica is a bit funny though:
Array[...&,#]...&
This generates a list with all the results of applying the unnamed function on the left to all the values i
from 1
to n
inclusive.
...Tr@Divisors@#-#...
We start by computing the divisors of i
, summing them with Tr
and subtracting i
itself so that it's just the sum of divisors less than i
.
...IntegerDigits[...]...
This turns the result into a list of its decimal digits.
##&@@...
And this removes the "list" head, so that all the digit lists are automatically concatenated in the result of Array
. For more details on how ##
works, see the "Sequences of arguments" section in this post.
...[[#]]
Finally, we select the n
th digit from the result.
05AB1E, 14 11 10 bytes
Compute n = 9999 in about 15 seconds. Code:
ÌL€Ñ€¨OJ¹è
Explanation:
Ì # Increment implicit input by 2
L # Generate the list [1 .. input + 2]
ۄ # For each, get the divisors
۬ # For each, pop the last one out
O # Sum all the arrays in the array
J # Join them all together
¹è # Get the nth element
Uses the CP-1252 encoding. Try it online!.
Pyth, 26 21 20 15 bytes
@sm`sf!%dTtUdSh
Try it online. Test suite.
Uses 0-based indexing. The program is O(n²) and completes for n = 9999 in about 14 minutes on my 2008 machine.