2017-10-16 12 views
1

リストlst = [121, 4, 37, 441, 7, 16]が与えられているので、それを繰り返すすべての数字を削除したいので、新しい文字列がlst = [37,7](元の文字列の素数)になります。どのような方法は、私がありますリストから素数を取得する

[121, 121, 4, 4, 37, 441, 441, 441, 441, 441, 441, 441, 441, 7, 16, 16, 16, 16] 

:、私はこの奇妙な探してリストを取得していますlst = [37,7]を取得する代わりに

def func(lst,x): 
    y = [] 
    for i in lst: 
     for x in range (1, i): 
      if (i % x) == 0 : 
       y.append(i) 
    return y 

print(func(lst,3)) 

は、これまでのところ私はこのコードを出すことに成功したいですこの仕事をすることができますか?

+0

「121%1 == 0」はもちろん、121%11 == 0のように真です。あなたのコードは、それぞれの数を「k」回繰り返す。ここで、「k」は適切な除数の数(「1」を含む)である。これは宿題と思われるので、修正する方法を困惑させます。 –

+1

私は取得できませんか?すべての非素数を削除したいですか? –

+0

ありがとうジョン・コールマン、私は確かにそうです! – Marujo92

答えて

2

これは宿題のような感じがするので、私は働くコードではなく戦略です。元のリストの番号のみが残っていることを確認したり、プライムではない番号を除外したりする必要があります。

「リストの各番号について、それが素数かどうかを判断し、そうであればそれを新しいリストに入れてください」

あなたのコードは90%ですが、あなたのカーネル(primality test)は正しくありません。素数をテストするための鍵は、それぞれの可能な整数の除数がではなく、が問題の数を均等に分割することを保証することです。例えば

、試験6は、可能な「0余り」整数除数のリストが

[1, 2, 3, 4, 5, 6] 

最初と最後の番号である(1,6)は素数限り何も意味していない場合(6/1は6、6/6は1)。だから、テストへの可能な約数のリストが今ここから

[2, 3, 4, 5] 

ですが、私はあなたのコードに欠けているの洞察力は、数のが素数、その可能な約数のすべてをしなければならないことということだと思います偶数(すなわち、0の余り)を生成しない

+2

これは素晴らしいことですが、あなたにはありがとうございます。とにかく解決策を望んでいない、そうでなければ私は学ばない!私はそれを見つけたら、正しいコードをここに掲載します! – Marujo92

関連する問題