为什么我的除数函数在某些情况下不起作用?
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 是多余的,请将其删除。
作为程序的一部分,我编写了这个简短的函数来计算一个数的因数个数,但是我注意到它在某些情况下不起作用。
这是我的代码:
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 是多余的,请将其删除。