Moved 20 to 26 to Python.
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user