素因数や除数を見つけるための記事を見てきましたが、私の質問に対する答えは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です。どんな言語でも簡潔かつ簡単に実装できます。ケースが閉まった。
私の最初の投稿、jmd_dkをフォーマットしてくれてありがとう。私はその変更に注意を払い、これらの規則を覚えようとします。適切な字下げのためのコードの "右/左へのブロックシフト"コマンドがあるか、手動で各行に4つのスペースを追加する必要がありますか? – MrT
初心者の間違い - コードの書式設定に '{}'ボタンを使用するだけです。 – MrT