在python

时间:2017-10-08 14:31:10

标签: python python-3.x

我需要编写一个代码,询问用户一系列整数,然后计算该范围内的哪些整数至少有3个因子(不包括1和整数本身)。我不知道如何考虑一个整数可以有多个相同因子的事实,例如,在我的代码中,整数8返回一个假值,因为程序将它分成两个整数,2和4.我想要返回值为true,因为8可以分为3个因子2.如何修复它?

def does_integer_have_3_or_more_factors(x):
    num_of_factors = 0
    for i in range(2, x):
        if x % i == 0:
            num_of_factors += 1
    if num_of_factors >= 3 :
        return True
    else :
        return False

def main():
    integer1 = int(input("Give first positive integer.\n"))
    integer2 = int(input("Give last integer.\n"))
    print("These integers have at least 3 factors.")
    for x in range(integer1, integer2 + 1):
        if does_integer_have_3_or_more_factors(x) == True:
            print(x)


main()

1 个答案:

答案 0 :(得分:0)

您需要使用找到的因子,并根据需要经常应用它们。也许你也想跟踪你找到的因素。

factors = []
...
for ... # see below
    while x > 1 and not x%i:
        factors.append(i)
        x /= i

您也可以在达到sqrt(x)后停止检查因素。

from math import sqrt
for i in range(2,int(sqrt(x))+1):

最后,你以过于复杂的方式处理布尔值。只是做

return len(factors) > 2  # "len(factors) > 2" will result in True or False directly

并检查

if does_integer_have_3_or_more_factors(x):
    print(x)
相关问题