除数函数是一个自然数的除数之和。
做了一点研究,我发现如果你想找到给定自然数 N 的除数函数,这是一个非常好的方法,所以我尝试用 Python 编写它:
def divisor_function(n):
"Returns the sum of divisors of n"
checked = [False]*100000
factors = prime_factors(n)
sum_of_divisors = 1 # It's = 1 because it will be the result of a product
for x in factors:
if checked[x]:
continue
else:
count = factors.count(x)
tmp = (x**(count+1)-1)//(x-1)
sum_of_divisors*=tmp
checked[x]=True
return sum_of_divisors
它工作得很好,但我确信它可以改进(例如:我创建了一个包含100000
元素的列表,但我没有使用其中的大部分)。
您将如何改进/实施它?
PS这是prime_factors
:
def prime_factors(n):
"Returns all the prime factors of a positive integer"
factors = []
d = 2
while (n > 1):
while (n%d==0):
factors.append(d)
n /= d
d = d + 1
if (d*d>n):
if (n>1): factors.append(int(n));
break;
return factors