Pythonで素数を2つの素数の和として表現できるか判定する方法
素数 n が与えられたとき、それを2つの素数 x と y の和(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 ずつ増やしながらループし、
numberがiで割り切れる場合は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) となります。大きな数に対しても効率的に動作するのが特徴です。
-
C++で数値が2つの三角数の和として表現できるか判定する方法
本記事では、ある整数が2つの三角数の和として表現できるかどうかを判定する方法を、C++のコード例とともに分かりやすく解説します。三角数とは三角数とは、1、3、6、10、15…のように、1から順に自然数を加算して得られる数列のことです。点を正三角形の形に並べたときの個数に対応することから「三角数」と呼ばれています。n番目の三角数は次の式で求められます。n × (n + 1) / 2例えば、1、3、6、10などが三角数に該当します。これらを利用すると、16は「6 + 10」という2つの三角数の和として表現できます。判定アルゴリズム判定の手順は非常にシンプルです。N未満のすべての三角数を生成し、セッ
-
Pythonで素数を判定するプログラムの書き方を徹底解説
はじめに この記事では、「与えられた数値が素数かどうかを判定する」という問題に対する解決策を、Pythonのコード例とともにわかりやすく解説します。 問題の概要 問題設定:ある数値が与えられたとき、その数が素数であるかどうかを判定するプログラムを作成します。 まず「素数」の定義をおさらいしましょう。1より大きい正の整数のうち、1とその数自身以外に約数を持たない数を素数(そすう)と呼びます。たとえば、2、3、5、7などはそれ以外の約数を持たないため、素数です。 プログラムの考え方 今回作成するプログラムでは、入力された数値が素数かどうかを以下の手順で判定します。 1以下の数値は素数ではない