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

Pythonで素数を2つの素数の和として表現できるか判定する方法

素数 n が与えられたとき、それを2つの素数 xy の和(n = x + y)として表現できるかどうかを判定する問題です。

例えば、n = 19 の場合、19 = 17 + 2 と表現できるため、出力は True になります。

アルゴリズムの考え方

この問題には重要な数学的な性質があります。n が奇数の素数である場合、その和が奇数になる2つの素数の組み合わせでは、必ず片方が偶数になります。偶数の素数は 2 だけ なので、結局「n − 2 が素数かどうか」を確認すればよいことになります。

解決の手順

  • 素数判定用の関数 isPrime() を定義します
  • number が 1 以下の場合は False を返します
  • number が 2 の場合は True を返します
  • number が偶数の場合は False を返します
  • 3 から √number + 1 の整数部分まで、2 ずつ増やしながらループし、numberi で割り切れる場合は False を返します
  • いずれにも該当しなければ True を返します
  • メイン処理では、isPrime(number)isPrime(number - 2) がどちらも True なら True を返し、そうでなければ False を返します

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

実装例

from math import sqrt
def isPrime(number):
    if number <= 1:
        return False
    if number == 2:
        return True
    if number % 2 == 0:
        return False
    for i in range(3, int(sqrt(number))+1, 2):
        if number%i == 0:
            return False
    return True
def solve(number):
    if isPrime(number) and isPrime(number - 2):
        return True
    else:
        return False
n = 19
print(solve(n))

入力

19

出力

True

計算量について

このアルゴリズムの素数判定は、√n までの奇数のみを試すため、時間計算量は O(√n) となります。大きな数に対しても効率的に動作するのが特徴です。

  1. C++で数値が2つの三角数の和として表現できるか判定する方法

    本記事では、ある整数が2つの三角数の和として表現できるかどうかを判定する方法を、C++のコード例とともに分かりやすく解説します。三角数とは三角数とは、1、3、6、10、15…のように、1から順に自然数を加算して得られる数列のことです。点を正三角形の形に並べたときの個数に対応することから「三角数」と呼ばれています。n番目の三角数は次の式で求められます。n × (n + 1) / 2例えば、1、3、6、10などが三角数に該当します。これらを利用すると、16は「6 + 10」という2つの三角数の和として表現できます。判定アルゴリズム判定の手順は非常にシンプルです。N未満のすべての三角数を生成し、セッ

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

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