2015-08-21 63 views
0

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

这里是我的代码:

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,则返回8,当正确的答案是6

关于如何解决此问题的任何建议或只是一个更好的方式来做到这一点?

预先感谢

回答

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是多余的,将其删除。

+0

因此,只需删除+1,它将适用于任何情况? – Ali

+0

@ali是的。只是删除它,ceil(n)+1是多余的,因为如果有一个元素被分割,你已经发现它了。 – amit

+0

啊,好吧,原来是一个微不足道的问题,应该已经发现了。谢谢您的帮助! – Ali

相关问题