计算一个整数有多少个因子

2024-04-19 07:42:59 发布

您现在位置: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

Tags: 函数in信息forreturnifdefrange
3条回答

问题是您正在计算除以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

更好的是,我们要意识到,对于每一个作为{}因子的{},我们只需要找到其中一个(即,{}有{}、{}和{}作为因子。计算2次(2x8=16)和4次(4x4=16)),因为其中一个将小于或等于{}的平方根,只需循环到{}的平方根即可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

顺便说一句:事实上,customary是将1和整数本身作为因子来计算的。所以所有这些结果应该是+2,而您的原始解实际上是正确的。要使上述解正确,只需从result=2开始

for i in range(1,integer+1):行中,您将遍历1和整数之间的所有数字,包括1和整数,它们当然是因子

例如,如果integer = 5,则循环1、2、3、4和5。其中1和5当然都是5的因子

您可以将该行编辑为for i in range(2,integer):以修复错误。生成的代码如下所示:

def num_factors(integer):
    result = 0
    for i in range(2,integer):
        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))

尽管有人在评论中建议,您可以进一步减少搜索空间

sympy提供此函数以查找基本因子

>>> from sympy.ntheory import factorint
>>> factorint(6008)   # 6008 = (2**3) * (751**1)
{2: 3, 751: 1}

相关问题 更多 >