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

Pythonで数値がエマープ数(Emirp Number)かどうかを判定する方法

ある整数 n が与えられたとき、それがエマープ数(Emirp number)であるかどうかを判定する方法を解説します。エマープ数とは、「prime(素数)」という単語を逆から綴った「emirp」に由来する名前で、数字を逆順に並べ替えると、元とは異なる別の素数になる素数のことを指します。

例えば、n = 97 の場合を見てみましょう。97 を逆順にすると 79 となり、これもまた素数であるため、判定結果は True になります。

アルゴリズム

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

  • num が素数でない場合は、False を返す
  • num の桁を逆順に並べ替えた reverse_num を求める
  • reverse_num が素数であれば True を、そうでなければ False を返す

実装例

理解を深めるために、以下のPythonコードを実行して確認してみましょう。

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

def solve(num):
    if not is_prime(num):
        return False
    reverse_num = 0
    while num != 0:
        d = num % 10
        reverse_num = reverse_num * 10 + d
        num = int(num / 10)
    return is_prime(reverse_num)

n = 97
print(solve(n))

コードのポイント

is_prime 関数は、2 から num-1 までの各整数で割り切れるかどうかを順番に調べることで、素数判定を行っています。一方、solve 関数では、num % 10 で最下位の桁を1桁ずつ取り出し、reverse_num * 10 + d と計算することで、桁を逆順に組み立てています。この処理によって元の数値の反転版が効率的に生成され、その結果に対して再度素数判定を行う仕組みです。

入力

97

出力

True

このように、素数判定と桁の反転処理を組み合わせることで、任意の数値がエマープ数であるかどうかを簡単に判定できます。

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

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

  2. 【Python入門】数値が素数かどうかを判定するプログラムの書き方

    この記事では、ユーザーが入力した数値(1より大きい整数)が素数かどうかを判定するPythonプログラムを紹介します。サンプルコードと実行結果、処理の流れを丁寧に解説しているので、Python初心者の方でも理解しやすい内容になっています。素数とは?素数とは、1より大きい正の整数のうち、約数が1とその数自身の2つしか存在しない数のことです。たとえば、2・3・5・7・11などは約数が1と自分自身だけであるため素数です。一方、4や6のように1と自分自身以外の約数を持つ数は「合成数」と呼ばれます。素数判定プログラムのサンプルコード# 入力された数値が素数かどうかを判定するPythonプログラム # ユ