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



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

下面是我的代码:
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。

有什么建议如何解决这个问题,或者只是一个更好的方法来做到这一点?

Thanks in advance

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

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

上述行中的+1是多余的,删除它

最新更新