Moved 20 to 26 to Python.

This commit is contained in:
2019-07-15 22:11:49 -04:00
parent 0ab214633e
commit f76b36c8d3
10 changed files with 194 additions and 174 deletions

View File

@@ -134,4 +134,46 @@ def collatz_sequence_length(n):
return length + collatz_sequence_length(n // 2)
@lru_cache(maxsize=10000)
def factorial(n):
if n == 1:
return 1
return n * factorial(n - 1)
def proper_divisors(n):
"""
Returns the list of divisors for n excluding n.
"""
if n < 2:
return []
divisors = [1, ]
d = 2
while d * d <= n:
if n % d == 0:
divisors.append(d)
d += 1
# Ignore first element and iterate list backwards.
for d in divisors[1:][::-1]:
q = n // d
if q != d:
divisors.append(q)
return divisors
def sum_proper_divisors(n):
"""
Returns the sum of proper divisors of a number.
"""
if n < 2:
return 0
s = 1
d = 2
while d * d <= n:
if n % d == 0:
s += d
q = n // d
if q != d:
s += q
d += 1
return s