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

时间:2015-08-21 21:22:28

标签: python algorithm function division factors

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

这是我的代码:

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时,如果正确答案为6,则返回8.

有关如何解决此问题的建议或仅提供更好的方法吗?

提前致谢

1 个答案:

答案 0 :(得分:1)

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

这使得您可以对元素进行两次计数,例如,使用20:ceil(sqrt(20))+1 = 5,因此条件if n%i ==0适用于4和5,并且每个都会增加2。

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