C++で数値がピタゴラス素数かどうかを判定する方法
本記事では、ある数がピタゴラス素数(Pythagorean Prime)であるかどうかをC++で判定する方法を解説します。ロジックの詳細に入る前に、まずピタゴラス素数とはどのような数なのかを見ていきましょう。
ピタゴラス素数とは?
ピタゴラス素数とは、4n + 1 の形で表すことができる素数のことです。つまり、ある数がピタゴラス素数であるかを調べるには、次の2つの条件を確認します。
- その数が素数であること
- その数を4で割った余りが1であること
この両方の条件を満たせば、その数はピタゴラス素数です。ピタゴラス素数の例としては、{5, 13, 17, 29, 37, 41, 53, …} などが挙げられます。
判定のアルゴリズム
判定の手順は以下の通りです。
- 入力された数値 n が素数かどうかを判定する
- 素数であれば、n を4で割った余りを計算する
- 余りが1ならピタゴラス素数、それ以外はピタゴラス素数ではない
サンプルコード
#include <iostream>
using namespace std;
// 素数判定関数
bool isPrime(int n){
for(int i = 2; i <= n/2; i++){
if(n % i == 0){
return false;
}
}
return true;
}
// ピタゴラス素数判定関数
bool isPythagoreanPrime(int n) {
if(isPrime(n) && ((n % 4) == 1)){
return true;
}
return false;
}
int main() {
int num = 29;
if(isPythagoreanPrime(num)){
cout << "この数はピタゴラス素数です";
}else{
cout << "この数はピタゴラス素数ではありません";
}
}
実行結果
この数はピタゴラス素数です
コードの解説
isPrime 関数は、2から n/2 までの整数で順番に割り切れるかどうかを確認する、シンプルな試し割り法による素数判定を行います。isPythagoreanPrime 関数では、この素数判定の結果と「4で割った余りが1」という条件を論理ANDで組み合わせることで、ピタゴラス素数であるかを総合的に判定しています。
上記の例では num = 29 を渡しています。29は素数であり、29 ÷ 4 の余りは1なので、「この数はピタゴラス素数です」と出力されます。
補足:より効率的な素数判定について
今回の素数判定は n/2 までループする実装のため、大きな数値に対しては処理時間が長くなります。パフォーマンスを改善したい場合は、判定範囲を √n までに抑える方法や、エラトステネスの篩などのアルゴリズムを活用すると効果的です。
-
C++で数値が素数かどうかを判定するプログラムの作成方法
素数とは? 素数(そすう)とは、1より大きい整数のうち、約数が「1」と「その数自身」のみである数のことです。最初の方の素数には以下のようなものがあります。 2, 3, 5, 7, 11, 13, 17 ここでは、入力された数値が素数かどうかを判定するC++プログラムを紹介します。 サンプルプログラム #include <iostream> using namespace std; int main() { int n=17, i, flag = 0; for(i=2; i<=n/2; ++i) { if(n%i==0) {
-
C#で素数かどうかを判定するプログラムの作成方法【初心者向け】
素数とは、1とその数自身以外に約数を持たない、1より大きい自然数のことです。この記事では、C#を使ってある数値が素数かどうかを判定するプログラムの作成方法を解説します。 素数判定の基本的な考え方 素数かどうかを判定するには、forループを使用します。ループ内の各反復処理でif文を使い、対象の数値を1から順番に割ったときの剰余(余り)が0になる回数を調べます。 for (int i = 1; i <= n; i++) { if (n % i == 0) { a++; } } ここではカウンター変数aを用意しています。このカウンターは、数値が素数である場合にの