2016-09-03 3 views
0

与えられた数の固有の素因数を返すコードを作成しました。ここにそのコードがあります。このコードでは、1が一意の素数であるとはみなされません。 factorial3は、与えられた数に対して階乗のリストを返す関数です。条件に基づいて要素に値を追加する補完をリストします

リストcountは、入力された数字の固有の素数を私に与えます。

たとえば、2の10,20の場合、要因は[2,5,10]と[2,5,10,20]です。しかし、固有の素因数はそれぞれ[2,5]と[2,5]である。したがって、数は[2,2]

私はリスト内包と同じ達成しようとしていますが、これまでに失敗しました。これまで私が試したことです。

c=[0 for i in numbers] 

new=[i+1 for i,k in enumerate(numbers) for j in factorial3(k) if factorial3(j)==[1,j]] 
print new 
new1=[c[i]+1 for i,k in enumerate(numbers) for j in factorial3(k) if factorial3(j)==[1,j]] 
print new1 

私はほとんどそこにありますが、1つのことが欠落しているだけで、繰り返しは1回だけ削減されます。

+1

副作用としてリスト内包表記を使用しないでください。あなたが実際に作成したリストを*使用していないので、それは非常に無駄です。 –

+0

@MartijnPieters、私はちょうど知識の目的のためにリスト内包を行う方法を知りたい。私は実際の状況でそれらを使用していません。 –

答えて

0

new1=[i+1 for i,k in enumerate(numbers) for j in factorial3(k) if factorial3(j)==[1,j]] 

c1={} 
for i in new1: 
    if i not in c1: 
      c1[i]=1 
    else: 
      c1[i]+=1 

sortedc=[v for k,v in sorted(c1.items(), key=lambda x:x[0])] 
x=zip(numbers, sortedc) 

このコードは、1の正しい値を返しません。このコードは、他のすべての正の整数で完全に正常に動作します。私は手動でコードの終わりに向かって1の階乗を加えました。

0

素数要素が必要な場合は、範囲全体ではなく、平方根に移動するだけです。

はあなたの最初の行を置き換えますと

c=[0 for i in numbers] 

:私は、私は以下のコードとを望んでいたものを達成することができました

c=[0 for i in numbers**0.5] 
+0

まだコードが間違っています。 –

+0

factorial3()関数を投稿できますか?これは他のSOユーザーのマシンでこれを再現するのに役立ちます。 – FrenchDwarf

+0

私はfactorial3関数を追加しました。ありがとう! –

関連する問題