Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonで3つの数が「隣接する素数」かどうかを判定する方法

隣接する素数とは?

3つの数が与えられたとき、それらが隣接する素数(連続する素数)であるかどうかを判定する問題を考えてみましょう。

隣接する素数とは、2つの素数の間に他の素数が存在しない関係のことです。例えば、5と7の間には素数がありません。同様に7と11の間にも素数は存在しないため、[5, 7, 11]という組み合わせは隣接する素数といえます。

したがって、入力が nums = [5, 7, 11] の場合、出力は True になります。

解決のアプローチ

この問題を解くためには、以下の手順に従います。

  • 3つの数のうち1つでも素数でない場合は False を返す
  • x の次の素数が y と一致しない場合は False を返す
  • y の次の素数が z と一致しない場合は False を返す
  • すべての条件を満たせば True を返す

それでは、実際のコード実装を見てみましょう。

サンプルコード

def isPrime(num):
    if num > 1:
        for i in range(2, num):
            if num % i == 0:
                return False
        return True
    return False

def get_next_prime(num):
    next_prime = num + 1
    while not isPrime(next_prime):
        next_prime += 1
    return next_prime

def solve(x, y, z):
    if isPrime(x) == False or isPrime(y) == False or isPrime(z) == False:
        return False

    next_prime = get_next_prime(x)
    if next_prime != y:
        return False

    if get_next_prime(y) != z:
        return False

    return True

nums = [5, 7, 11]
print(solve(*nums))

入力

[5, 7, 11]

出力

True

コードの解説

このプログラムは、主に3つの関数で構成されています。

  • isPrime関数: 引数として受け取った数が素数かどうかを判定します。2からその数自身まで順に割り切れるかを確認し、割り切れる数があれば素数ではないと判断します。
  • get_next_prime関数: 指定された数より大きい最小の素数(次の素数)を求めます。候補となる数を1ずつ増やしながら、素数が見つかるまで isPrime 関数でチェックを繰り返します。
  • solve関数: メインの判定処理を行います。まず3つの数すべてが素数であることを確認し、その後 x の次の素数が y、y の次の素数が z とそれぞれ一致するかを検証します。

このように、素数判定と次の素数を求める処理を組み合わせることで、3つの数が隣接する素数であるかどうかを効率的に判定できます。

  1. Pythonでブロックの高さリストが直線y=xに対して対称かどうかを判定するプログラム

    数値のリスト nums があるとします。これは正方形のブロックを横一列に並べたときの、各列の高さを表しています。ここで、このブロック形状が直線 y = x に対して対称であるかどうかを判定する必要があります。 たとえば、入力が nums = [7, 5, 3, 2, 2, 1, 1] の場合、出力は True になります。 解き方のアプローチ この問題は、リストの両端から同時に走査していくことで効率的に判定できます。手順は次のとおりです。 i を 0、j を「リストの長さ - 1」で初期化します。 i <= j である間、次の処理を繰り返します。 h := nums[j](右側の

  2. Pythonで与えられたグラフが2部グラフかどうかを判定するプログラム

    2部グラフとは無向グラフが与えられたとき、そのグラフが2部グラフ(バイパータイトグラフ)であるかどうかを判定する方法を解説します。2部グラフとは、グラフのすべての頂点を2つの集合 A と B に分割でき、グラフ内のすべての辺 {u, v} が必ず一方の端点 u が集合 A、もう一方の端点 v が集合 B に属するようなグラフのことです。つまり、同じ集合内の頂点同士を結ぶ辺(A-A や B-B)が一切存在しないグラフです。例として、次のようなグラフを考えてみましょう。この場合、頂点 [0, 4] を集合 A に、[1, 2, 3] を集合 B に分類できます。すべての辺は A から B、または