2017-10-08 8 views
0

ユーザに整数の範囲を尋ねるコードを書く必要があります。そして、その範囲のどの整数が少なくとも3つの要素(1と整数自体を除く)を持つかを計算する必要があります。私は、整数が複数の同じ要素を持つことができるという事実を考慮する方法を知らない。例えば、プログラムで2と4の2つの整数に分割するので、整数8は偽の値を返す。価値が真実であること、8は3の2つの要因に分けることができるからです。私はそれをどのように修正するのですか?Pythonで整数をチェックする

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() 
+4

を確認してください。 8の要素は1,2,4,8です。 –

+0

私はあなたの質問を理解するのに苦労しています... 8は、1、2、4、8という要素を持っているので、Falseを返します。 1と8を含める場合は、1つだけ多くの要素が必要です。そうでなければ、あなたのソリューションは、あなたがしたいと言ったことをすると思います。 –

答えて

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) 
関連する問題