2017-09-26 6 views
0

私はこのコードで素数である数字の要素を返そうとしています。たとえば、誰かがn = 55に入ると、5と11に戻ってきます。最初の部分は正しいかどうかは確かですが、何とか2番目の部分で何が欠けているのか分かりません素数をチェックするPythonの素因数ループのため

私は55のコードを実行すると、私は5(11がありません)を取得します。

誰かが自分のコードを確認したりフィードバックしたりできますか?

l = [] 
primefactors = [] 

def factor(n): 
    count = 0 

    print 'These are the factors:' 
    for num in range(2,n+1): 
     if n%num == 0: #checks that it is a factor 
      print num #These are the factors 
      l.append(num) 

    for i in l: 
     if i == 2 : #checks for two 
      primefactors.append(i) 

     else: 
      for x in range(3,i+1,2): #checks for odd numbers 
       if i%x == 0: 
        count += 1 
        if count == 1: 
         primefactors.append(i) 


    print "These are the prime factors:" 
    print primefactors 
+0

'から来count'のでしょうか? – user2357112

+0

@ user2357112、コメント行を削除したときに私は誤ってその行を削除しました。私はコードを編集しました。 – paulnsn

答えて

0

数が素数であることを、あなたは、単にすべての不要なものを除去することにより、すべての要因を得ることができますが、それは保証しません。

l = [] 
primefactors = [] 
def factor(n): 
    count = 0 
    for num in range(2,n+1): 
     if n%num == 0 and num != n: #checks that it is a factor 
      primefactors.append(num) 

    print ("These are the prime factors:") 
    print (primefactors) 
    del l[:] 
    del primefactors[:] 
+0

ありがとう、しかし、今、私が因子(92)を入力すると、私は[2,23,46]になります。 46はそこにはいけません。何か案は? – paulnsn

+0

さて、92は素数ではないので、2つ以上の要因があります。 46 * 2 = 92。問題は、なぜ4 - 23 * 4 = 92 – Alex

+0

4素数ではない(2 * 2 = 4) – paulnsn

0

はこれを試してみてください、私は追加のチェックを追加しましたprimefactorsリストに追加する前にnumberがプ​​ライムであるかどうかを確認してください。

primefactors = [] 
def factor(number): 
    for i in range(2,int(number//2)+1): 
    prime = True 
    for j in range(2,int(i**.5)+1): 
     if i%j == 0: 
     prime = False 
     break 
    if prime and number%i == 0: 
     primefactors.append(i) 
    print (primefactors) 

factor(92) 
factor(55) 

出力:

[2, 23] 
[2, 23, 5, 11] 
+0

ありがとうございました。ありがとうございました。最初のforループが何をしているか説明してください。なぜ範囲(数/ 2)の上限は+1ですか? – paulnsn

+0

数値の素因数は常に2、(number // 2)+1の間にあります。 たとえば、 1)数字が10の場合、6を超える数値は決してその要素にはなりません。 2)数値が11の場合は、6(数値// 2 + 1)を超える数値は決してその要素になりません。 これがあなたの質問に答えた場合は、回答としてマークしてください。 –

関連する問題