python - 计算一个整数有多少个因数
问题描述
所以我写了一个函数来确定一个数字有多少个因子并列出这个数字。但是我的功能没有输出正确的信息。
def num_factors(integer):
result = 0
for i in range(1,integer+1):
if integer%i == 0:
result +=1
return result
print(num_factors(5))
print(num_factors(6))
print(num_factors(97))
print(num_factors(105))
print(num_factors(999))
由于某种原因,它正在输出:
2
4
2
8
8
什么时候应该输出:
0
2
0
6
6
解决方案
问题是您正在计算除以 1 和测试整数本身。
您需要减去 2 或跳过1
并integer
获得所需的输出:
def num_factors(integer):
result = 0
for i in range(2,integer): # skips 1 and integer...
if integer%i == 0:
result +=1
return result
更好的是要意识到,对于每一个x * y
因素,integer
我们只需要找到其中一个(即,16
有2
,,4
和8
作为因素。计数 2 两次(2 x 8=16)和 4 一次(4 x 4= 16)) 并且因为一个将小于或等于的平方根,integer
只是循环到平方根integer
并增加 2 而不是 1,并且只进行一小部分测试(并使结果快 1000 倍) :
def num_factors(integer):
result = 0
stop=int(float(integer)**0.5)
for i in range(2,stop+1):
if integer%i == 0:
result +=2
if stop*stop==integer: result-=1
return result
for x in (5,6,97,105,999):
print(f'{x}: {num_factors(x)}')
印刷:
5: 0
6: 2
97: 0
105: 6
999: 6
顺便说一句:实际上,习惯上将1
整数本身作为因素进行计数。所以所有这些结果都应该是+2,你原来的解决方案实际上是正确的。要使上述解决方案正确,只需从result=2