2016-11-19 1 views
0

私はPythonで提供されている数値のすべての因数分解を見つけようとしています。例えば数字の可能なすべての置換のリスト

:1)N = 12、 を所与の出力がされる、F(N)= [[2,2,3-]、[4,3]、[6,2]、[ 12] N = 24所与

2)、 出力は、N F()=あろう[2,2,2,3]、[2,2,6-]、[2、 12]、[4,6]、[8,3]、[24]ここ

は私のコードである:

def p(a): 
    k=1 
    m=1 
    n=[] 
    for i in range (len(a)): 
     for j in range(0,i+1): 
      k*=a[j] 
     for l in range(i+1,len(a)): 
      m*=a[l] 
     n+=[[k,m],] 
     k=1 
     m=1 
    return n 

def f(n): 
    primfac = [] 
    d = 2 
    while d*d <= n: 
     while (n % d) == 0: 
      primfac.append(d) 
      n //= d 
     d += 1 
    if n > 1: 
     primfac.append(n) 
    return p(primfac) 

しかし、私のコードに戻り、次の値:

1)N = 12、出力は、出力され、

[[2, 10], [4, 5], [20, 1]] 

2)1)N = 24について、

あります
[[2, 12], [4, 6], [8, 3], [24, 1]] 

関連する結果を得るにはどうすればよいですか?

答えて

0

私はPythonを知らないので、コードを教えてください。here私は関連する質問(Javaを読むことができればJavaのコードもあります)を提供しました。

  1. あなたの数が多重度で因数分解します - これは高い確率で最も高価なステップO(SQRT(N))である - これはあなたが

  2. ビルドあなたのセットを望んでいることをAlである場合は、こちらを停止することができます{1、P I 、P I 、...、P Iメートル I} - P メートルの多重度を持つ素因数いる私

  3. これらのセットの間のデカルト積を実行し、あなたの番号のすべての約数を得るでしょう - あなたは多くのと数字のみのためにここに長い時間を費やしています異なる要因(および多重) - 例えば2 X 3 X 5 X 7 1980の除数を有するであろう。

は今、それぞれの除数dは、上記のそれのペア(N/d)が付属していますので、あなたは関係なく、順序の明確な因数分解をしたい場合は、you''lはそれらをソートし、重複を排除する必要がありますから生じました。

関連する問題