为什么我的除数函数在某些情况下不起作用?

Why does my divisors function not work in certain cases?

作为程序的一部分,我编写了这个简短的函数来计算一个数的因数个数,但是我注意到它在某些情况下不起作用。

这是我的代码:

def divisors(n):
number_of_factors = 0

max_test_num = int(math.ceil(math.sqrt(n))+1)
for i in xrange(1,max_test_num):
    if n%i ==0:
        number_of_factors += 2
    if i*i == n:
        number_of_factors -= 1
return number_of_factors

现在如果这个数有一对互质的因数,那么返回的结果是 2 太大了。

例如输入20,则returns8,当正确答案为6时

关于如何解决这个问题或更好的方法有什么建议吗?

提前致谢

max_test_num = int(math.ceil(math.sqrt(n))+1)

这会让你计算元素两次,例如,20:ceil(sqrt(20))+1 = 5,所以条件 if n%i ==0 适用于 4 和 5,并且每个你增加 2。

上述行中的 +1 是多余的,请将其删除。