首页 > 解决方案 > 计算一个整数有多少个因数

问题描述

所以我写了一个函数来确定一个数字有多少个因子并列出这个数字。但是我的功能没有输出正确的信息。

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

标签: pythonfactors

解决方案


问题是您正在计算除以 1 和测试整数本身。

您需要减去 2 或跳过1integer获得所需的输出:

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我们只需要找到其中一个(即,162,,48作为因素。计数 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


推荐阅读