1. ホーム
  2. python

[解決済み] Pythonセット理解

2022-03-04 20:36:37

質問

宿題で2つの問題があるのですが、2つ目の問題で行き詰っています。

  1. Pythonの集合理解(Pythonのセットビルダー表記に相当)を使って、100未満のすべての素数の集合を生成しなさい。素数とは、1より大きく、それ自身と1以外の整数で割り切れない整数のことであることを思い出してください。素数の集合を出力せよ(例:print 関数を使用).

  2. Pythonの集合理解を使って、100未満の素数からなるすべての素数ペアからなる順序付きペアの集合(長さ2のタプル)を生成してください。プライム・ペアとは、両方とも素数である連続した奇数のペアのことです。プライム・ペアの集合を変数に格納する。1という数字の集合は非常に便利でしょう。素数対の集合を出力せよ.

最初の1つについては、これは完全に動作します。

r= {x for x in range(2, 101) 
if not any(x % y == 0 for y in range(2, x))} 

しかし、2つ目についてはかなり困っています。集合rと何かのデカルト積を取らなければならないのかもしれないが、ちょっと自信がない。

これである程度近づきましたが、連続したペアが欲しいだけです。

cart = { (x, y) for x in r for y in r
     if x < y }

解決方法は?

primes = {x for x in range(2, 101) if all(x%y for y in range(2, min(x, 11)))}

テストを少し簡略化してみました -。 if all(x%y の代わりに if not any(not x%y

また、yの範囲を限定しました。除数 > sqrt(x) をテストする意味がありません。つまり、max(x) == 100 は max(y) == 10 を意味します。x <= 10 の場合、y も < x でなければなりません。

pairs = {(x, x+2) for x in primes if x+2 in primes}

素数のペアを生成してテストするのではなく、1つを取得して対応する高い素数が存在するかどうかを確認します。