我需要编写一个代码,询问用户一系列整数,然后计算该范围内的哪些整数至少有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()
答案 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)