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

Pythonで数値が階乗素数(Factorial Prime)かどうかを判定する方法

ある数値 n が与えられたとき、それが階乗素数(Factorial Prime)であるかどうかを判定する方法を解説します。

階乗素数とは?

階乗素数とは、「ある整数の階乗に対して 1 小さい数、または 1 大きい数」であり、かつ素数である数のことです。

例えば、入力が n = 719 の場合、出力は True になります。これは以下のように表せるためです。

719 = 720 − 1 = 6! − 1

判定アルゴリズムの手順

この問題は、次の手順で解くことができます。

  • まず、num が素数であるかを確認します。素数でなければ False を返します。
  • 変数を初期化します:factorial = 1i = 1
  • factorial <= num + 1 が成り立つ間、以下を繰り返します。
    • factorial = factorial * i として階乗を更新
    • num + 1 == factorial または num - 1 == factorial であれば True を返す
    • i = i + 1 としてカウンタを進める
  • ループが終了しても該当しなければ False を返します。

Pythonでの実装例

理解を深めるために、実際の実装を見てみましょう。

from math import sqrt

def isPrime(num):
    if num <= 1:
        return False
    if num <= 3:
        return True
    if num % 2 == 0 or num % 3 == 0:
        return False
    for i in range(5, int(sqrt(num)) + 1, 6):
        if num % i == 0 or num % (i + 2) == 0:
            return False
    return True

def solve(num):
    if not isPrime(num):
        return False
    factorial = 1
    i = 1
    while factorial <= num + 1:
        factorial *= i
        if num + 1 == factorial or num - 1 == factorial:
            return True
        i += 1
    return False

num = 719
print(solve(num))

入力例

719

出力結果

True

処理のポイント

このコードでは、素数判定に「6k ± 1 最適化」を使用しています。2 と 3 の倍数を事前に除外した上で、√num までの範囲を 6 ずつ飛ばしながら確認することで、効率的に素数判定を行えます。その後、階乗を順次計算し、対象の数値が「階乗 ± 1」と一致するかを調べることで、階乗素数かどうかを正確に判定できます。

  1. Pythonで数値が二面素数(Dihedral Prime)かどうかを判定する方法

    ある整数nが与えられたとき、それが「二面素数(dihedral prime)」であるかどうかを判定する方法を解説します。二面素数とは、その数自体が素数であり、さらに7セグメントディスプレイに表示した際に、表示の向き(通常の向きでも上下逆さまでも)に関わらず、同じ数または別の素数として読み取れる数のことです。例えば、入力がn = 1181の場合、出力はTrueになります。下の数字は上の数字を上下逆さま(180度回転)にして表示したものであり、どちらも素数となっています。アルゴリズムの手順この問題を解くために、以下の手順で進めます。up_side_down() 関数を定義します。引数としてnを受け

  2. Pythonで素数を判定するプログラムの書き方を徹底解説

    はじめに この記事では、「与えられた数値が素数かどうかを判定する」という問題に対する解決策を、Pythonのコード例とともにわかりやすく解説します。 問題の概要 問題設定:ある数値が与えられたとき、その数が素数であるかどうかを判定するプログラムを作成します。 まず「素数」の定義をおさらいしましょう。1より大きい正の整数のうち、1とその数自身以外に約数を持たない数を素数(そすう)と呼びます。たとえば、2、3、5、7などはそれ以外の約数を持たないため、素数です。 プログラムの考え方 今回作成するプログラムでは、入力された数値が素数かどうかを以下の手順で判定します。 1以下の数値は素数ではない