2017-11-06 20 views
1

素因数や除数を見つけるための記事を見てきましたが、私の質問に対する答えはPythonで見つかりませんでした。私は素因数のリストを持っています。つまり、24[2,2,2,3]です。このリストから、可能なすべての因数分解が必要です。すなわち、24の場合、出力は[[2,12], [3,8], [4,6], [2,2,6], [2,3,4], [2,2,2,3]]です。 itertoolアプローチを試しましたが、これは重複した回答をたくさん作成し、他のものを忘れました([2,3,4]を見つけて、[4,6]を無視するようなもの)。Pythonの素因数リストから可能なすべての因子分解を作成します。

私は特に、生成された素因数リストを使用するアプローチに興味があります。私は再帰関数を使って回避策を見つけました。

def factors(n, n_list):     
    for i in range(2, 1 + int(n ** .5)): 
     if n % i == 0: 
      n_list.append([i, n // i]) 
      if n // i not in primes: #primes is a list containing prime numbers 
       for items in factors(n // i, []): 
        n_list.append(sorted([i] + items)) 
    fac_list = [[n]]     #[n] has to be added manually 
    for facs in n_list:    #removes double entries  
     if facs not in fac_list: 
      fac_list.append(facs) 
    return fac_list 

しかし、これは素数だけでなくすべての数字を調べなければならないので、大きなnには時間がかかります。素因数リストのためのコンビナトリアルアプローチははるかに速くすべきである。

:いくつかのリソースを調べた後、良い戦略の最も良い説明は、最も高い評価の回答here on SOです。どんな言語でも簡潔かつ簡単に実装できます。ケースが閉まった。

+0

私の最初の投稿、jmd_dkをフォーマットしてくれてありがとう。私はその変更に注意を払い、これらの規則を覚えようとします。適切な字下げのためのコードの "右/左へのブロックシフト"コマンドがあるか、手動で各行に4つのスペースを追加する必要がありますか? – MrT

+0

初心者の間違い - コードの書式設定に '{}'ボタンを使用するだけです。 – MrT

答えて

1

あなたの仕事は数字のmultiplicative partitionを確認することです。 Googleは、あなたが行く必要がある場所を指摘する必要があります。スタックオーバーフローはすでにan answerです。

+0

非常に感謝しています。 "乗法的なパーティション"。不思議ではない、私は適切なキーワードなしで答えを見つけることができませんでした。 – MrT

関連する問題